你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

“21天好习惯“第一期-12

2021/11/3 3:04:29

大数减法
int,long long 的数量级分别为 1e9,1e18,当数据大于18位时无法直接简单的a+b计算,会变成负数。

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std; 
int a[505],b[505],c[505];
char st1[505],st2[505],st3[505];

bool compare(char s1[], char s2[])
{
    int x = strlen(s1);
    int y = strlen(s2);
    if(x!=y) return x>y;
    else{
        int i;
        for(i=0;i<x;i++)
        if(s1[i]!=s2[i])
        return s1[i]>s2[i];

    }
}
int main() {
    int flag = 0;
    scanf("%s%s",st1,st2);
    int i,j;
    if(!compare(st1,st2)) 
    {
         flag = 1;
        strcpy(st3,st1);
        strcpy(st1,st2);
        strcpy(st2,st3);
    }
    int x = strlen(st1);
    int y = strlen(st2);
    for(i=0;i<x;i++)
        a[x-i] = st1[i] - '0'; 
    for(i=0;i<y;i++)
        b[y-i] = st2[i] - '0';
    int z = x;

    for(i=1;i<=z;i++)
    {
        if(a[i]<b[i])
        {
            printf("zcx");
            a[i]+=10;
            a[i+1] -=1;

        }
        c[i] = a[i] - b[i];

      }
    while(c[z]==0&& z>1) z--;
    if(flag) printf("-");
    for(i=z;i>0;i--)
    printf("%d",c[i]);

    return 0;
}