解题思路:因为任何整形包括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 人评分
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:793 |
C语言训练-自由落体问题 (C语言代码)浏览:650 |
Hello, world! (C语言代码)浏览:916 |
单词个数统计 (C语言代码)浏览:1046 |
母牛的故事 (C语言代码)浏览:519 |
1199题解浏览:707 |
非常简单的算法,题解1049:C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:639 |
C语言程序设计教程(第三版)课后习题6.7 (C++代码)浏览:603 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:859 |
汪汪与打针 (C++代码)浏览:1435 |