解题思路:因为任何整形包括long long都不可能存储超过1000位的数字,所以,我们只能用字符数组一个数字一个数字的存储。
相加过程参考以前小学老师讲的,1,先从右到左对齐,2,从右到左,个位,十位。。。。等等的顺序相加,满10进1!2,因为我们的数字都是字符存储,所以相加的时候要减48化成数值,eg ‘0’-48==0;
注意事项:多组测试!!!
参考代码:(复制粘贴到编译器上,查看更方便!!)
#include<stdio.h>
#include<string.h>
#define N 1005
int main()
{
char a[N],b[N],c[N];
int len,len1,len2,cha;
int i,k;
while(scanf("%s %s",a,b)!=EOF)
{
len1=strlen(a);
len2=strlen(b);
len=len1>=len2?len1:len2;
for(i=0;i<len;i++)
c[i]='0';
k=0;
if(len1<len)
{
cha=len-len1;
for(i=len-1;i>=0;i--)
{
if(i<cha)
a[i]='0';
else
a[i]=a[i-cha];
}
}
else if(len2<len)
{
cha=len-len2;
for(i=len-1;i>=0;i--)
{
if(i<cha)
b[i]='0';
else
b[i]=b[i-cha];
}
}
for(i=len-1;i>=0;i--)
{
c[i]=(c[i]-48)+(a[i]-48)+(b[i]-48)+48;
if(i!=0&&(c[i]-48)>=10)
{
c[i]=(c[i]-48)-10+48;
c[i-1]++;
}
if(i==0&&(c[i]-48)>=10)
{
k=1;
c[i]=(c[i]-48)-10+48;
}
}
if(k==1)
printf("1");
for(i=0;i<len;i++)
{
printf("%c",c[i]);
}
printf("\n");
}
return 0;
}
0.0分
0 人评分
【蟠桃记】 (C++代码)(递归计算)浏览:1047 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:561 |
C语言考试练习题_保留字母 (C语言代码)浏览:633 |
C语言训练-斐波纳契数列 (C语言代码)浏览:2956 |
程序员的表白 (C语言代码)浏览:1559 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:600 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:786 |
字符串比较 (C语言代码)答案错误????浏览:629 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:1044 |
众数问题 (C语言代码)浏览:888 |