3:大整数加法(待复习版)

 

由于写得时间太久,断断续续,思维混乱,此代码仅限于蒙混过关,


由此可以看出,至于字符类型和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;
}


 



posted @ 2014-07-20 00:19  drfxiaoliuzi  阅读(230)  评论(0编辑  收藏  举报