• 高精度


    //1.读入字符串 
    
    //scanf
    //可以同一行,中间用空格隔开,也可以两行
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    char s1[1010],s2[1010];
    int main(){
        scanf(%s%s,s1,s2);
        int lena=strlen(s1);
        int lenb=strlen(s2);
        ...
    } 
    //gets
    //只能两行
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    char s1[1010],s2[1010];
    int main(){
        gets(s1);gets(s2);
        int lena=strlen(s1);
        int lenb=strlen(s2);
        ...
    } 
    //cin
    //可以同一行,中间用空格隔开,也可两行
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int main(){
        string s1,s2;
        cin>>s1>>s2;
        int lena=strlen(s1);
        int lenb=strlen(s2);
        ...
    } 
    
    //2.存入数组
    //注意倒叙    1~len -> 低位~高位 
    for(int i=1;i<=lena;i++){
        a[i]=s[lena-i]-'0';//字符串最后一位是'0'
    }
    
    //3.加法
    //(1)模拟手工计算,设置一个进位标记m 
    int m=0;
    lenc=max(lena,lenb);
    for(int i=1;i<=lenc;i++){
        c[i]=(m+a[i]+b[i])%10;
        m=(m+a[i]+b[i])/10;
    }
    if(m==1){
        lenc++;
        c[lenc]=1;
    }
    //(2)先计算后处理进位
    for(int i=1;i<=lenc;i++)
        c[i]=a[i]+b[i];
    for(int i=1;i<=lenc;i++){
        c[i+1]=c[i+1]+c[i]/10;
        c[i]=c[i]%10l
    }
    if(c[lenc+1]==1) lenc++;
    //(2)++  去掉c数组
    lena>lenb
    for(int i=1;i<=lena;i++) a[i]=a[i]+b[i];
    for(int i=1;i<=lena;i++){
        a[i+1]=a[i+1]+a[i]/10;
        a[i]=a[i]%10;
    } 
    if(a[lena+1]==1) lena++;
    
    //4减法
    //(1)借位 
    for(int i=1;i<=lena;i++){
        if(a[i]<b[i]){
            a[i+1]--;
            a[i]+=10;
        }
        a[i]-=b[i];
    } 
    //(2)输出
    while(a[lena]==0&&lena>1) lena--;
    for(int i=lena;i>=1;i--)
        cout<<a[i];
    cout<<endl; 
    //(3)谁减谁的问题
    if(strcmp(s1,s2)==0) {cout<<0<<endl;return 0;}
    if(lena<lenb||lena==lenb&&strcmp(s1,s2)<0){
        strcpy(s3,s1);
        strcpy(s1,s2);
        strcpy(s2,s3);
        swap(lena,lenb);
        cout<<'-';
    } 
    //5乘法
    for(int i=1;i<=lena;i++)
        for(int j=1;j<=lenb;j++)
            c[i*j-1]=a[i]*b[j];
    int lenc=lena+lenb-1;
    for(int i=1;i<=lenc;i++){
        c[i+1]=c[i+1]+c[i]/10;
        c[i]%=10;
    }
    if(c[lenc+1]>0) lenc++;
    //6位运算结果的输出
    for(int i=lenc;i>=1;i--)
        cout<<c[i]<<" "; 
    cout<<endl;
  • 相关阅读:
    怎么获取数组中的对象的某一项之和
    原型链
    js的事件循环(Eventloop) 机制/js的宏任务微任务执行顺序
    怎么替换数组中对象的属性
    求对象所有值的和
    sequelize中duplicating:false的使用
    WebSocket
    轮播

    ssl tsl
  • 原文地址:https://www.cnblogs.com/lcan/p/9482275.html
Copyright © 2020-2023  润新知