| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 328 人关注过本帖
标题:请各位大神,大牛看看。帮我解下疑,谢谢了。
只看楼主 加入收藏
王捉熊
Rank: 2
等 级:论坛游民
帖 子:46
专家分:61
注 册:2012-10-23
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
请各位大神,大牛看看。帮我解下疑,谢谢了。
一下为求两个20~30位数相加的程序,请各位大神指点,我哪错了,谢谢。

#include <stdio.h>
#include <string.h>
void main()
{
char a[30],b[30],c[30];
int i,n,m,temp;
printf("please\n");
gets(a);
gets(b);
n=strlen(a);
m=strlen(b);
if(n>m)                     //a,b数组哪个元素多,输出数组就与哪个数组元素个数相同。
{
for (i=0;i<n;i++)     //将数组中的数进行倒置,即高位放在后面,低位在前面,以便相加。
c[i]=a[n-i-1];
for (temp=0,i=0;i<n;i++)   //将各个位上的数进行相加
{
c[i]+=b[i]+temp;
temp=0;
if(c[i]>9)
{                   //若大于十,前一位就加1
c[i]=c[i]-10;
temp=1;
}
}
for (i=--n;i>=0;i--)        //对数进行输出,高位在前,低位在后。
printf("%d",c[i]);
printf("\n");
}
  else
{
for (i=0;i<m;i++)         //将数组中的数进行倒置,即高位放在后面,低位在前面,以便相加。
c[i]=b[m-i-1];
for (temp=0,i=0;i<m;i++)//将各个位上的数进行相加
{
c[i]+=a[i]+temp;
temp=0;
if(c[i]>9)
{                     //将各个位上的数进行相加
c[i]=c[i]-10;
temp=1;
}
}
for (i=--m;i>=0;i--) //对数进行输出,高位在前,低位在后。
printf("%d",c[i]);
printf("\n");
}

}
搜索更多相关主题的帖子: please include 元素 
2012-12-09 11:11
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
我感觉楼主的代码实现不了。
具体没细看,但是感觉
gets(a);
gets(b);这里就有问题,gets函数会把回车键转换成'\0'存入字符串的最后,而楼主的代码c[i]=a[n-i-1];
好像没有解决这个问题,把'\0'作为了转换后字符串的首元素

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-09 12:45
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:20 
程序代码:
for (i = 0;i < n;i++)
    c[i] = a[n - i - 1];            //b不需要逆置么?
for (temp = 0, i = 0;i < n;i++)    //若和是n+1位咋办?在条件这改成i < n || temp
{
    c[i] += b[i] + temp;    //字符相加:‘0’+‘0’=‘0’?
    temp = 0;
    if(c[i] > 9)                //以字符处理,全部大于9的,应该是>'9'
    {
        c[i] = c[i] - 10;   
        temp = 1;
    }
}


[fly]存在即是合理[/fly]
2012-12-09 13:22
TKpunk
Rank: 2
等 级:论坛游民
帖 子:3
专家分:11
注 册:2012-12-3
收藏
得分:0 
程序代码:
for(i=0;i<size;i++)
    {
        sum[i]+=num1[i]+num2[i];
        sum[i+1]+=sum[i]/10;
        sum[i]%=10;
    }
    sum[size]=sum[size-1]/10;
    sum[size-1]%=10;
2012-12-09 20:14
王捉熊
Rank: 2
等 级:论坛游民
帖 子:46
专家分:61
注 册:2012-10-23
收藏
得分:0 
哈哈,感谢大家,在大家的启发下,我完成了,不过有点凌乱。下面是我改写之后的程序。
此程序位计算两个长整数。
#include <stdio.h>
#include <string.h>
void main()
{
  char a[10000000],b[10000000],c[10000000];
   int i,n,m,temp;
   printf("please\n");
   gets(a);
   gets(b);
   n=strlen(a);
   m=strlen(b);
   if(n>m)                 
{
   for (i=0;i<n;i++)   
      c[i]=a[n-i-1];
   for (i=0;i<m/2;i++)
       { temp=b[i];
         b[i]=b[m-i-1];
         b[m-i-1]=temp;
        }
   for (temp=0,i=0;i<n;i++)   //将各个位上的数进行相加
      {
        if (i<m)
        c[i]=c[i]-48+b[i]-48+temp;
        else c[i]+=temp-48;
        temp=0;
        if(c[i]>9)
        {                   //若大于十,前一位就加1
           c[i]=c[i]-10;
            temp=1;
        }              
}         
   for (i=--n;i>=0;i--)        //对数进行输出,高位在前,低位在后。
     printf("%d",c[i]);
   printf("\n");
}
  else      
{
    for (i=0;i<m;i++)         
    c[i]=b[m-i-1];
    for (i=0;i<n/2;i++)
    {temp=a[i];
     a[i]=a[n-i-1];
     a[n-i-1]=temp;
    }            
    for (temp=0,i=0;i<m;i++)//将各个位上的数进行相加
    {if(i<n)
     c[i]=c[i]-48+a[i]-48+temp;
    else c[i]+=temp-48;
     temp=0;
      if(c[i]>9)
      {                   //将各个位上的数进行相加
        c[i]=c[i]-10;
         temp=1;
      }
 }
               
    for (i=--m;i>=0;i--) //对数进行输出,高位在前,低位在后。
         printf("%d",c[i]);
    printf("\n");
             }
}

新手上路,说错请勿见怪!
2012-12-10 18:32
快速回复:请各位大神,大牛看看。帮我解下疑,谢谢了。
数据加载中...
 
   



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

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