由于写得时间太久,断断续续,思维混乱,此代码仅限于蒙混过关,
由此可以看出,至于字符类型和int类型之间的转换,博主掌握得不够扎实,有待夯实。
教训:
1.从此此次过程可以看出,程序不宜放太久不去看,肯定会遗忘的甚至遗忘了当初想法
也不宜把整个时间拖得太长,要速战速决。
2.另,可以考虑再前面加一个解题思路,防止忘记思路,同时适当添加注释。
3:大整数加法
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
求两个不超过200位的非负整数的和。
输入
- 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。 输出
- 一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 样例输入
-
22222222222222222222 33333333333333333333
样例输出
-
55555555555555555555
以下为程序源码:
#include <stdio.h>
#define N 202//5// 202
int main(void)
{
char a[N];
char b[N];
char sum[N];
int c;
int i;
int j;
int k;
char ch;
int tag = 0;
for(i=0; i<N; i++)
{
a[i] = '\000';
b[i] = '\000';
sum[i] = '0';
}
scanf("%s", a);
scanf("%s", b);
for(i=N-2, j=N-2, k=N-2; i>-1 || j>-1 ; i--, j--,k--)
{
while(('\000' == a[i]) && (i>-1))
{
i--;
}
while(('\000' == b[j])&& (j>-1))
{
j--;
}
if(i>-1&& j>-1)
c = (a[i]-'0') + (b[j]-'0')+(sum[k]-'0');
else if(j>-1&&i<0)
c = b[j]-'0'+(sum[k]-'0');
else if(i>-1&&j<0)
c = a[i] - '0'+(sum[k]-'0');
if(c>=10)
{
// printf("%d\n", c);
sum[k]= (c-10)+'0';
// printf("%d\n", sum[k]);
if(sum[k] == '\000')
sum[k] = '0';
sum[k-1] ='1';
}
else
{
sum[k] = c+'0';//sum[k]+c;//(sum[k]-'0') + (c);
// if(sum[k]>=10)
{
// sum[k] = sum[k]+sum[k]-10;
// sum[k-1] = '1';
}
}
}
sum[N-1] = '\0';
for(i=0; i<=N-2; i++)
{
if(sum[i]=='0'&&tag==0)
{
continue;
}
else if (sum[i]!='0')
{
tag = 1;
}
putchar(sum[i]);
}
putchar('\n');
return 0;
}