您的位置:首页 > 编程语言 > Java开发

Java作业:大数累加(我是真不知道有什么用)

2017-09-10 21:52 316 查看
java老师让用c写一个1加到1e8和1e12的累加和。还不让用等差数列公式,非要一个一个加,不知为什么。而且还非要超一下int的表示范围,又禁止了long long int 的使用,真是为了用高精度而用高精度啊~不管了,反正先写一个应付作业吧。这样我把这个代码打印出来老师也不会怀疑我是网上抄的了~

代码:

#include<bits/stdc++.h>
#define maxn 100
using namespace std;

struct xcx
{
int w[maxn]={0};
int num;
};

xcx a,b,ans;
char temp_a[maxn]={0};
char temp_b[maxn]={0};

xcx conversions(char *x)
{
xcx ans;
int temp=strlen(x);
for(int i=0;i<temp;i++)
{
ans.w[temp-i-1]=x[i]-'0';
}
ans.num=temp;
return ans;
}
xcx add(xcx x)
{
x.w[0]++;
for(int i=0;i<x.num;i++)
{
x.w[i+1]+=(x.w[i]/10);
x.w[i]%=10;
}
if(x.w[x.num]!=0)x.num++;
return x;
}

xcx get_sum(xcx a,xcx b)
{
xcx ans;
ans.num=0;
int i;
for(i=0;i<maxn;i++)
{
ans.w[i]=0;
}
int final_num=max(a.num,b.num);

for(i=0;i<=final_num;i++)
{
ans.w[i]+=a.w[i]+b.w[i];
ans.w[i+1]+=(ans.w[i]/10);
ans.w[i]%=10;
}
ans.num=(ans.w[final_num]==0)?final_num:final_num+1;
return ans;
}

void output(xcx x)
{
int i;
for(i=x.num-1;i>=0;i--)
{
printf("%d",x.w[i]);
}
}

bool same(xcx x,xcx y)
{
if(x.num!=y.num)return 0;
for(int i=0;i<x.num;i++)
{
if(x.w[i]!=y.w[i])return 0;
}
return 1;
}

int main()
{
printf("请输入a,b(a<b):");
scanf("%s",temp_a);
scanf("%s",temp_b);
a=conversions(temp_a);
b=conversions(temp_b);
ans=a;
while(1)
{
if(same(a,b))break;
a=add(a);
ans=get_sum(ans,a);
}
output(ans);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐