| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 429 人关注过本帖
标题:计算高精度加法。有时输入一些数据可以得出正确答案,可有一些数据输入时, ...
只看楼主 加入收藏
涧边幽草
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-11-4
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:8 
计算高精度加法。有时输入一些数据可以得出正确答案,可有一些数据输入时,输出的却是错误答案?
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
   int m,n,k,i,j,t=0,max,temp;
   char a[80],b[80],c[200];
   gets(a);gets(b);
   m=strlen(a);
   n=strlen(b);
   if(m>=n) max=m;
   else max=n;
   for(i=0;i<m;i++) a[i]=a[i]-48;
   for(j=0;j<n;j++) b[j]=b[j]-48;
   for(i=0;i<=(m-1)/2;i++)

   {
       temp=a[i];
       a[i]=a[m-i-1];
       a[m-i-1]=temp;
   }
   for(j=0;j<=(n-1)/2;j++)
   {
       temp=b[j];
       b[j]=b[n-j-1];
       b[n-j-1]=temp;
   }
   for(k=0;k<max;k++)
   {
       c[k]=a[k]+b[k]+t;
       if(c[k]>=10)
       {
            t=c[k]/10;
            c[k]=c[k]%10;
       }
       else t=0;
       printf("%d",c[k]);
   }
    if(t!=0)
    {
        c[max]=t;
        printf("%d",c[max]);
    }
    return 0;
}
2015-11-11 11:28
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:5 
根本不知道你想干什么

说出你的算法
说出你输入的数据,期待输出的数据,实际输出的数据

举个例子:
我想输入两个整数,输出这两个整数的和
我输出 1 2,期待输出 3,实际输出 4。
2015-11-11 11:44
涧边幽草
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-11-4
收藏
得分:0 
回复 2楼 rjsp
不好意思,坏习惯,没写明,我会改的
2015-11-11 16:47
涧边幽草
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-11-4
收藏
得分:0 
回复 2楼 rjsp
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
   int m,n,k,i,j,t=0,max,temp;
   char a[80],b[80],c[200];
   gets(a);gets(b);//输入两个字符串
   m=strlen(a);//分别记录a和b的长度
   n=strlen(b);
   if(m>=n) max=m;//比较两字符串的长度的长短
   else max=n;
   for(i=0;i<m;i++) a[i]=a[i]-48;//将a由字符转为整型
   for(j=0;j<n;j++) b[j]=b[j]-48;//将b转换为整型
   for(i=0;i<=(m-1)/2;i++)//将a字符串倒过来

   {
       temp=a[i];
       a[i]=a[m-i-1];
       a[m-i-1]=temp;
   }
   for(j=0;j<=(n-1)/2;j++)//将b字符串倒过来
   {
       temp=b[j];
       b[j]=b[n-j-1];
       b[n-j-1]=temp;
   }
   for(k=0;k<max;k++)//计算a和b各位的和并进位
   {
       c[k]=a[k]+b[k]+t;
       if(c[k]>=10)
       {
            t=c[k]/10;
            c[k]=c[k]%10;
       }
       else t=0;
       printf("%d",c[k]);
   }
    if(t!=0)//判断最后一位是否大于十,大于十则再次进位
    {
        c[max]=t;
        printf("%d",c[max]);
    }
    return 0;
}
//由于以上存在问题,所以还有几步我没写出来,即将c字符串再次倒过来
2015-11-12 23:18
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:5 
回复 4楼 涧边幽草
你得告诉别人你输入什么,输出什么,期待输出什么。
即,你得给别人一个输入数据,别人能够重新你的bug。
------------------------------------------------
for(k=0;k<max;k++)//计算a和b各位的和并进位 有错误,假设
a = 1 2 3 4 0 ? ? ?
b = 1 2 0 ? ? ? ? ?
你就会将 4 和 ? 相加,得到一个不确定的数。

2015-11-13 08:46
涧边幽草
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-11-4
收藏
得分:0 
回复 5楼 rjsp
对,就是你所所说的,每到这个地方时,输出的总是和预想有很大的差别,请问有什么改进的方法吗?
2015-11-13 09:14
涧边幽草
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-11-4
收藏
得分:0 
回复 5楼 rjsp
我想了很久,不知道如何改进,请提示一下
2015-11-13 09:15
涧边幽草
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-11-4
收藏
得分:0 
回复 8楼 边小白
说的是,自找麻烦,谢谢
2015-11-13 12:58
快速回复:计算高精度加法。有时输入一些数据可以得出正确答案,可有一些数据输入 ...
数据加载中...
 
   



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

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