永发信息网

C语言“字符串大整数加法”这题怎么做?

答案:5  悬赏:50  手机版
解决时间 2021-04-02 08:46
C语言“字符串大整数加法”这题怎么做?
最佳答案
#include
#include
#define MAXD 100
int main()
{
    char str1[MAXD],str2[MAXD];     //用于保存键盘输入的两个待加大整数
    int num1[MAXD],num2[MAXD];
    while(1)
    {
        memset(str1,0,sizeof(str1));
        memset(str1,0,sizeof(str2));
        memset(num1,0,sizeof(num1));
        memset(num2,0,sizeof(num2));//将这些数组清零
        scanf("%s",str1);
        scanf("%s",str2);
        int len1,len2,i,j;
        len1=strlen(str1);
        len2=strlen(str2);
        j=0;
        int max=len1>len2?len1:len2;
        for(i=len1-1; i>=0; i--)
            num1[j++]=str1[i]-'0';
        
        j=0;
        for(i=len2-1; i>=0; i--)
            num2[j++]=str2[i]-'0';
        for(i=0; i        {
            num2[i]+=num1[i];//相加
            if(num2[i]>=10)
            {
                num2[i]-=10;
                num2[i+1]+=1;//产生进位
            }
        }
        if(num2[max]) printf("%d",num2[max]);//如果最高位产生进位
        for(i=max-1; i>=0; i--)
            printf("%d",num2[i]);
        printf("
");
    }
    return 0;
}
全部回答
#include
#include
int a[201],b[201];
char c[201];
int main()
{
int s1,s2,s,i,k=0;
scanf("%s",c);
s1=strlen(c);
s=s1;
for(i=0;ia[i+1]=c[s1-i-1]-48;
memset(c,0,sizeof(c));
scanf("%s",c);
s2=strlen(c);
for(i=0;ib[i+1]=c[s2-i-1]-48;
if(s2>s1)s=s2;
for(i=1;i<=s;i++)
{
a[i]+=b[i];
if(a[i]>=10){
a[i]-=10;
a[i+1]++;
}
}
for(i=s+1;i>=1;i--)
if(a[i]!=0||k==1||i==1){printf("%d",a[i]);k=1;}
}
# include 
# include 

int main(){
char str1[1000],str2[1000];
char str3[1000],str4[1000];
char result[1000];
char result2[1000];
int k1,k2,i,c = 0,k3 = 0,k4 = 0,temp,j;
scanf("%s,%s",str1,str2);
k1 = strlen(str1);
k2 = strlen(str2);
for(i=k1-1;i>=0;i--)
str3[k3++] = str1[i];
for(i=k2-1;i>=0;i--)
str4[k4++] = str2[i];
str3[k3] = 0;
str4[k4] = 0;
//puts(str3);
//puts(str4);

for(i=0;str3[i]&&str4[i];i++)
{
temp = (str3[i]-48)+(str4[i]-48)+c;
if(temp<10)
{
result[i] = temp+48;
c = 0;
}
else
{
result[i] = temp-10+48;
c = 1;
}
}
if(k3>k4)
{
for(j=i;str3[j];j++)
{
result[j] = str3[j]+c;
c = 0;
}
}
else
{
for(j=i;str4[j];j++)
{
result[j] = str4[j]+c;
c = 0;
}
}

result[j] = 0;
//puts(result);
c = 0;
for(i=strlen(result)-1;i>=0;i--)
{
result2[c++] = result[i];
}
result2[c] = 0;
printf("%s",result2);

return 0;
}
 没仔细研究
#include
#include
#define MAXD 100
int main()
{
char str1[MAXD],str2[MAXD]; //用于保存键盘输入的两个待加大整数
int num1[MAXD],num2[MAXD];
while(1)
{
memset(str1,0,sizeof(str1));
memset(str1,0,sizeof(str2));
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));//将这些数组清零
scanf("%s",str1);
scanf("%s",str2);
int len1,len2,i,j;
len1=strlen(str1);
len2=strlen(str2);
j=0;
int max=len1>len2?len1:len2;
for(i=len1-1; i>=0; i--)
num1[j++]=str1[i]-'0';

j=0;
for(i=len2-1; i>=0; i--)
num2[j++]=str2[i]-'0';
for(i=0; i {
num2[i]+=num1[i];//相加
if(num2[i]>=10)
{
num2[i]-=10;
num2[i+1]+=1;//产生进位
}
}
if(num2[max]) printf("%d",num2[max]);//如果最高位产生进位
for(i=max-1; i>=0; i--)
printf("%d",num2[i]);
printf("\n");
}
return 0;
}
分长一倍,会有好多人来抢着做啊
我的想法是定义来好字符串 a[N],b[N],c[N],
再定义一个 flag标记是不是进位,初始值是零
反转顺序,比如输入的是 123456,反转后变成 654321
就是让个位数刚好在 a[0]位置
for循环,直到两个数都到最高位
tmp=a[i]+b[i]-'0'-'0';
c[i]=tmp%10+flag
flat=tmp/10
最后再反回来
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
一袋味精50千克,学校食堂一天要用这样的味精
西华师范大学是985工程高校吗?
win8.1lol无法全屏,把那个4也改3了,但是还
孔刘是孔子后代吗
起凡技能显示效果不完整,比如说司马懿的C只
谁有逆光源网络剧百度云啊
ping 路由器正常 ping外网丢包
初三今天6月6日考什么试,要考的科目是哪些
本人弹电吉他6年,小拇指抬高的问题一直无法
腾迅手机管家的拦截回复音如何设置正在通话中
单选题用显微镜观察洋葱表皮细胞时,一般不能
大晚上看到这个,想吓死人么
问道手游溜溜马好不好
到底哪个更适合我,我双眼250度,带一点散光
两张一样的邮票,哪个是真的啊
推荐资讯
夏天太阳能中午能上水吗
预计2020年我国一次能源需求为多少亿吨标准煤
逻辑异或运算符和不等于运算符的区别是什么?
主场让一球2:1怎么算
DHL按实重还是体积重
从王寨服务区到巢湖每天有几次车,分别是几点
求助:有关北京神州新桥这个公司的问题大神们
有句说:“谁说太阳会找到月亮”是什么意思
汽车的曲轴工作原理是什么
苹果5支不支持移动4G网络
测试材料表面性能用什么仪器?
我家三向电没有经过我同意剪了
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?