| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 843 人关注过本帖
标题:求个详细的解释
只看楼主 加入收藏
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:20 
程序代码:
#include <stdio.h>
#include<iostream>
using namespace std;
#define ASCII 48


 int main()
{
int i,j,k,m=0,p;

char a[1001],b[1001];
int c[1001];                                            //数组c中放的是计算结果       
for(p=0;p<1001;p++){ c[p]=0;  a[p]=' ';  b[p]=' '; }    //个人理解:这里a[p],b[p]都赋成串结束符更合适

while(cin>>a>>b)    // 将两个长整数,作为字符串输入
{
  i=0;  j=0;  k=0;

  while(a[i]!=' ') { i++;  }        //找到串尾的位置,准备从个位开始做加操作
  i=i-2;
  while(b[j]!=' ')  {   j++;  }        //找到串尾的位置,准备从个位开始做加操作
  j=j-2;

  while(i>=0&&j>=0)                            //从个位开始做对应数位a[i]和b[i]的加操作
  {
   if(c[k]+a[i]-ASCII+b[j]-ASCII>9)            //当 当前位 加操作有进位时。其中“-ASCII”是将数字字符,转化成相应的数字。下面类似。
   {
    c[k]=(c[k]+a[i]+b[j]-2*ASCII)%10;        //计算进位后的剩余数放入c[k]中,注意到:c[0]中方的是个位。
    c[k+1]++;                                //进位加入c[k+1]
   }
   else
   c[k]+=a[i]+b[j]-2*ASCII;                    //当前位加操作没有进位的情况
   k++;
   i--;
   j--;
  }

  while(i>=0)            // 当a串较长时,处理长出的那部分:只需每个数位a[i]加上进位c[k]
  {
   if(c[k]+a[i]-ASCII>9)    // 处理操作加没有进位的情况
   {
    c[k]=(c[k]+a[i]+b[j]-2*ASCII)%10;
    c[k+1]++;
   }
   else                        // 处理操作加有进位的情况           
    c[k]+=a[i]-ASCII;
    k++;
    i--;
  }
  while(j>=0)            //当b串较长时,处理b串长出的那部分
  {
   if(c[k]+b[j]-ASCII>9)
   {
    c[k]=(c[k]+b[j]-ASCII)%10;
    c[k+1]++;
   }
   else
    c[k]+=b[j]-ASCII;
   k++;
   j--;
  } 

  printf("the result is :\n");
  printf("%s + %s =",a,b);

  if(c[k]==0) k--;        //先找结果的最高位

  while(k>=0)    //再输出个数位上的结果
  {
   printf("%d",c[k--]);
  }
  printf("\n");

  for(p=0;p<1001;p++)  //为计算下一组 a,b,初始化数组a,b,c
  {
   c[p]=0;
   a[p]=' ';
   b[p]=' ';
  }
}


return 0;
}

2011-04-30 09:44
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
11楼 解释的不错。大家现在应该能看懂了吧。

大概看看,应该能感觉出来,a, b 放的是数,c 里放的是结果。
然后算的过程就是 c 加 a 中的一们再加 b 的一位,超过 9 的要进一位。和小学的竖式算法差不多的。把握了大思路,不是很难看明白。
2011-04-30 10:24
肖付
Rank: 2
等 级:论坛游民
帖 子:53
专家分:24
注 册:2010-9-11
收藏
得分:0 
回复 10楼 吴军林
这个是C++里面的头文件,包含的是一些输入输出流的东西。相当于stdio.h。
2011-04-30 15:10
肖付
Rank: 2
等 级:论坛游民
帖 子:53
专家分:24
注 册:2010-9-11
收藏
得分:0 
回复 12楼 pangding
嗯。能够理解一些了。
2011-04-30 15:12
肖付
Rank: 2
等 级:论坛游民
帖 子:53
专家分:24
注 册:2010-9-11
收藏
得分:0 
回复 12楼 pangding
从各位开始进行加操作的时候的那个i,j,为什么都要减2的。
2011-04-30 15:14
top_dada
Rank: 2
等 级:论坛游民
帖 子:35
专家分:26
注 册:2011-4-20
收藏
得分:0 
回复 10楼 吴军林
这是C++的头文件
输入输出流
2011-04-30 16:05
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 15楼 肖付
开始的时候都初始化成空格了。
输入完成之后,第一个空格前面是 '\0',再往前一位才是个位。这个往后找 '\0' 的话也行,那样往前挪一位就可以了,不过意思差不多。
2011-04-30 18:15
快速回复:求个详细的解释
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036554 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved