4 条题解

  • 1
    @ 2023-3-19 17:09:50
    # include <iostream>
    # include <algorithm>
    # include <string>
    
    using namespace std;
    
    int a[1005];
    int b[1005];
    int c[1005];
    
    // 123 + 456  = 579
    // 321 + 654 = 975
    // 5 + 7 
    string Add(string strA, string strB){
    	for(int i = 0; i < strA.length(); i ++)
    		a[i] = strA[strA.length() - 1 - i] - '0';
    	for(int i = 0; i < strB.length(); i ++)
    		b[i] = strB[strB.length() - 1 - i] - '0';
    
    	
    
    	
    	for(int i = 0; i < max(strA.length(), strB.length()); i ++){
    			c[i] += b[i] + a[i];  //求和
    			c[i + 1] += c[i] / 10;
    			c[i] = c[i] % 10;		 
    	}
    	
    	// 去前导0
    	int pos = 0; 
    	for(pos = max(strA.length(), strB.length()) + 1; pos > 0; pos --){
    		if(c[pos] != 0) break;
    	}
    	string ans = "";
    	for(int i = pos; i >=0; i --){
    		ans += char(c[i] + '0');
    	}
    	return ans;
    	
    }
    // A > B   1
    // A = B   0;
    // A < B   -1
    int  Compare(string strA, string strB){
    	
    	if(strA.length() < strB.length()) return -1;
    	if(strA.length() > strB.length()) return 1;
    	for(int i = 0; i < strA.length(); i ++){
    		if(strA[i] - '0' < strB[i] - '0' ) return -1;
    		if(strA[i] - '0' > strB[i] - '0' ) return 1;
    	}
    	return 0;
    }
    
    // a - b
    string Sub(string strA, string strB){
    	
    	bool flag = true;  // 正负号的问题 
    	if(Compare(strA, strB) == -1){
    		swap(strA, strB);
    		flag = false;
    	}
    	
    	// 字符到数字的问题 
    	for(int i = 0; i < strA.length(); i ++)
    		a[i] = strA[strA.length() - 1 - i] - '0';
    	for(int i = 0; i < strB.length(); i ++)
    		b[i] = strB[strB.length() - 1 - i] - '0';
    	
    	// 加减进位的问题 
    	for(int i = 0 ; i < max(strA.length(), strB.length()); i ++){
    		c[i] = a[i] - b[i];
    		if(c[i] < 0){   // 判断是否要借位 
    			c[i] += 10; // 借位后+10 
    			c[i + 1] -= 1; // 减 1 
    		}
    	}
        // 去前导0的问题 
    	int pos = 0; 
    	for(pos = max(strA.length(), strB.length()) + 1; pos > 0; pos --){
    		if(c[pos] != 0) break;
    	}
    	string ans = "";
    	for(int i = pos; i >=0; i --){
    		ans += char(c[i] + '0');
    	}
    	if(flag == false) return "-"+ans;
    	return ans;
    }
    string Multi(string strA, string strB){
    	// 字符到数字的问题 
    	for(int i = 0; i < strA.length(); i ++)
    		a[i] = strA[strA.length() - 1 - i] - '0';
    	for(int i = 0; i < strB.length(); i ++)
    		b[i] = strB[strB.length() - 1 - i] - '0';
    	// 乘法进位的问题
    	
    	for(int i = 0; i < strA.length(); i ++){
    		for(int j = 0; j < strB.length(); j ++){
    			c[i + j] += (a[i] * b[j]);
    			c[i + j + 1] += c[i + j] / 10;
    			c[i + j] %= 10;
    		}
    	}
    	// 去前导0
    	int pos = 0; 
    	for(pos = max(strA.length(), strB.length()) + 1; pos > 0; pos --){
    		if(c[pos] != 0) break;
    	}
    	string ans = "";
    	for(int i = pos; i >=0; i --){
    		ans += char(c[i] + '0');
    	}
    	return ans;	
    }
    // 高精度/低精度 
    string Div(string strA, long long B, long long& Mod){
    	// 字符到数字的问题 
    	for(int i = 0; i < strA.length(); i ++)
    		a[i] = strA[i] - '0';
    	for(int i = 0; i < strA.length(); i ++){
    		Mod = Mod * 10 + a[i];
    		c[i] = Mod / B;
    		Mod %= B;
    	} 
    		// 去前导0
    	int pos = 0; 
    	for(pos = 0; pos< strA.length(); pos ++){
    		if(c[pos] != 0) break;
    	}
    
    	string ans = "";
    	for(int i = pos; i < strA.length(); i ++){
    		ans += char(c[i] + '0');
    	}
    
    	return ans;	
    	
    }
    // 高精度/高精度 
    string Div2(string strA, long long B){
    
    	
    }
    
    
    int main() {
    	
    	string A = "15";
    	long long B = 4;
    	long long Mod = 0;
    	cout <<  Div(A,B, Mod) << endl;
    	cout << Mod << endl;
    
    
    	return 0;
    }
    
    
    • 0
      @ 2023-5-16 22:46:59
      #include <cstdio>
      #include <string.h>
      #include <queue>
      #include <math.h>
      #include <vector>
      #include <algorithm>
      #include <iomanip>
      #include <stack>
      #include <cstring>
      #include <bits/stdc++.h>
      #include <algorithm>
      using namespace std;
      int a[100000];
      int n, len=1, x;
      int main(){
      	cin >> n;
      	a[1]=1;
      	for(int i=1; i<=n; i++){
      		x=0;
      		for(int j=1; j<=len ; j++){
      			a[j]=a[j]*i+x;
      			x=a[j]/10;
      			a[j]%=10;
      			if(x>0&&j>=len)len++;
      			
      			
      		}
      	}
      	for(int i=len; i>=1; i--)cout << a[i];
      		return 0;
      		
      	}//非常简单,但很容易超时,所以我们需要开到100000
      
      • -3
        @ 2023-3-19 17:11:05

        6

        • -4
          @ 2023-3-19 17:13:04

          有能记下来的人类吗?

          • 1

          信息

          ID
          1553
          时间
          1000ms
          内存
          256MiB
          难度
          6
          标签
          递交数
          146
          已通过
          41
          上传者