代码改变世界

hdu_1002 大数相加----高精度问题

2012-01-09 12:41  java环境变量  阅读(286)  评论(0)    收藏  举报

           话说当初在hdu上看过这题,只是那时盲目自信的以为很容易实现,所以跳了过去。      昨晚上准备搞这个算法,满怀信心的敲完代码,却总是有这样那样的问题。  虽然还是能做出来,但给本人的打击还是蛮大的。
          下面我写一下我的思路。
          先以字符串的方式输入两"数".字符串的每个元素代表一个数位上的数字。
          把字符串的每个元素转化成相应的数字储存在一个数组中。
          再模拟加法运算。
          例如:  输入789   56
                             0 9 8 9
                        +     0  5 6
                      ___________________
                             1 0 4 5
          最高位都赋为0是因为 可能两数相加后会多一个数位。
           最后输出的时候判断一下最高位是否为零就可以了。
   
           
            

  //下面就是模拟加法运算的算法
  for(i=len;i>=0;i--)
  {
            n[i]=(l[i]+s[i]+k)%10;
   if(l[i]+s[i]+k>9)
    k=1;//k用于记录是否进1;
   else
    k=0;
  }




                                   

           

       再写几句,我以前对有些问题想不清楚时,也喜欢百度。但前些天看了  一位ACM大牛 sanxian 写的篇博客,受了点启发,直接搜代码,对自己能力的提高没什么用处。不要想着直接看别人代码,有问题时,先一定要有耐心和信心自己去努力想出来,实在想不出,再和别人去交流交流算法。

       所以,如果有喜欢搞算法的朋友,欢迎交流算法。^_^

                                                                                                                                                    2012. 01. 09

 

 

          今天重新做了一下这题。得出点经验,一道题不能只是Ac了就不管了,一道已经Ac的题 重做一遍还是能发现 很多东西。下面是我今晚写的代码。相比于以前还是有点进步的。   

 

                              

#include<stdio.h>
#include<string.h>
#define MAX 1000
int main()
{
	char a[MAX],b[MAX];
	int sum[MAX+1];
	int t,count=1;
	while(scanf("%d",&t)!=EOF)
	{
	     while(t--)
	     {
		     int i,j,carry=0;
		     scanf("%s%s",a,b);
		     memset(sum,0,sizeof(sum));             //初始化函数memset.
	              //将字符串转为数组形式
		      for(i=strlen(a),j=0;i>=0;--i,j++)
			 sum[j]=a[i]-'0';
		     for(i=strlen(b),j=0;i>=0;--i,j++)
			 sum[j]+=b[i]-'0';
		     // 进位运算
		     for(i=0;i<=(strlen(a)>strlen(b)?strlen(a):strlen(b));i++)
			 if(sum[i]>9)
			 {
				 sum[i]-=10;
				 sum[i+1]++;
			 }
	          printf("Case %d:\n",count++);           //控制格式
		 printf("%s + %s = ",a,b);               //控制格式
		 for(j=MAX;j>=0;j--) if(sum[j]) break;   //去掉高位多余的0
		 for(i=j;i>0;i--) printf("%d",sum[i]);
                   //控制格式
		 printf("\n");
		 if(t!=0) printf("\n");
	    }
	}
	return 0;
}

                                                                                                                                                                                                                                           2012. 02 .02