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);
}