| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 517 人关注过本帖
标题:高精度加法压位
只看楼主 加入收藏
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
结帖率:79.37%
收藏
 问题点数:0 回复次数:1 
高精度加法压位
高精度加法压位基本上做好了,但是有一个测试数据过不去:
99999999999999999999999999999999999999999999
1

多一个9结果正确,少一个9、两个9结果也正确,这是为什么?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int a[1000],b[1000],sum[1000]={0}; /*开大几位,避免越界*/
int flag=0;
int max(int a,int b)
{
if(a>b) return a;
else return b;
}
void rollback(int array[],int Len)
{
    int temp,i;
    for(i=0;i<Len/2;i++)
    temp=array[i],array[i]=array[Len-i-1],array[Len-i-1]=temp;
}
int dismember(char array[],int length)
{
int i,j,t;
if(length%4)
{
t=4-length%4;
for(i=t+length-1;i>=t;i--)
array[i]=array[i-t];
length+=t;
for(i=0;i<t;i++) array[i]='0';
}
for(i=0,j=0;i<length;i+=4,j++)
{
if(flag==0)
a[j]=(array[i]-'0')*1000+(array[i+1]-'0')*100+(array[i+2]-'0')*10+array[i+3]-'0';
if(flag==1)
b[j]=(array[i]-'0')*1000+(array[i+1]-'0')*100+(array[i+2]-'0')*10+array[i+3]-'0';
}
length=j;
flag=1;
return length;
}
int main()
{
int i,plus=0;
int a_length,b_length;
char temp[1000];
gets(temp);
a_length=strlen(temp);
a_length=dismember(temp,a_length);
rollback(a,a_length);
gets(temp);
b_length=strlen(temp);
b_length=dismember(temp,b_length);
rollback(b,b_length);
for(i=0;i<max(a_length,b_length);i++)
{
    plus=a[i]+b[i]+plus;
    sum[i]=plus%10000;
    plus=plus/10000;
}
i=i-1;
printf("%d",sum[i]);
for(i=i-1;i>=0;i--)
if(sum[i]>1000) printf("%d",sum[i]);
else
if(sum[i]>100) printf("0%d",sum[i]);
else
if(sum[i]>10) printf("00%d",sum[i]);
else
printf("000%d",sum[i]);
system("pause");
return 0;
}
搜索更多相关主题的帖子: include return 
2011-02-27 09:16
变幻小子
Rank: 6Rank: 6
来 自:广东陆丰
等 级:侠之大者
帖 子:188
专家分:473
注 册:2011-3-4
收藏
得分:0 
很正常啊

明天的梦
2011-03-20 13:08
快速回复:高精度加法压位
数据加载中...
 
   



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

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