大整数加法和乘法

    科技2022-08-13  95

    大整数加法

    1.java

    public class sum{ public static void main(){ Scanner cin = new Scanner(System.in); while(cin.hasNext()){ BigInteger a = cin.BigInteger(); BigInteger b = cin.BigInteger(); BigInteger s = a+b; System.out.println(s); } } }

    2.c++数组模拟

    int main() { vector<int> a(1000,0); vector<int> b(1000,0); string s1, s2; while (cin >> s1 >> s2) { int len = max(s1.size(), s2.size()); vector<int> res(len+1); vector<int> carry(len + 1,0); //反序将字符串转化为数字存入数组 for (int i = s1.size()-1, j = 0; i >= 0; --i, j++) { a[j] = s1[i]-'0'; } for (int i = s2.size()-1, j = 0; i >= 0; --i, j++) { b[j] = s2[i]-'0'; } for (int i = 0; i < len; ++i) { int sum = a[i] + b[i] + carry[i]; res[i] = sum % 10; carry[i+1] = sum / 10; } res[len] = carry[len]; if (carry[len] == 1) { res[len] = carry[len]; } else { len--; } for (int i = len; i >= 0; --i) { cout << res[i]; } } }

    不用进位数组的写法:

    int main() { vector<int> a(1000,0); vector<int> b(1000,0); string s1, s2; while (cin >> s1 >> s2) { int len = max(s1.size(), s2.size()); vector<int> res(len+1); //反序将字符串转化为数字存入数组 for (int i = s1.size()-1, j = 0; i >= 0; --i, j++) { a[j] = s1[i]-'0'; } for (int i = s2.size()-1, j = 0; i >= 0; --i, j++) { b[j] = s2[i]-'0'; } for (int i = 0; i < len; ++i) { res[i] += a[i] + b[i]; res[i + 1] = res[i] / 10; res[i] = res[i] % 10; } if (res[len] == 0) { len--; } for (int i = len; i >= 0; --i) { cout << res[i]; } } }

    大整数乘法

    python a = input() b = input() print(int(a)*int(b)) 数组模拟乘法 #include <iostream> #include <string> #include <cstring> #include <algorithm> using namespace std; int a[2005],b[2005],c[4005]; // 全局变量,自动初始化为0 // 数组模拟乘法 string multi(int a[],int b[],int lena,int lenb){ // 在这里不能使用sizeof()获取数组的长度:因为这里函数形参a是数组的地址(或指针),而不是传给整个的数组空间;指针的大小为 4字节(32位)或 8字节(64位) // 函数不可能只依靠一个首地址就知道你传进来的数组长度,要再传一个参数作为数组长度 // cout<<sizeof(a); for(int i = 0;i < lenb; ++i){ for(int j = 0; j < lena; ++j){ c[i+j] += a[j]*b[i]; } } for(int i=0;i<lena+lenb;++i){ if(c[i]>9){ c[i+1] += c[i]/10; c[i] = c[i]%10; } } int len = lena+lenb; while(c[len]==0 && len>0){ len--; } string res=""; for(int i = len;i>=0;--i){ res+=c[i]+'0'; } return res; } int main(){ string s1,s2; cin>>s1>>s2; // 逆序存储 for(int i=s1.size()-1, j=0; i>=0; --i,++j){ a[j] = s1[i]-'0'; } for(int i=s2.size()-1, j=0; i>=0; --i,++j){ b[j] = s2[i]-'0'; } int lena = s1.size(); int lenb = s2.size(); cout << multi(a,b,lena,lenb) << endl; return 0; }
    Processed: 0.011, SQL: 8