4 条题解
-
1余东霖 (yudonglin) LV 7 @ 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
-
12023-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; }
-
-32023-3-19 17:11:05@
6
-
-42023-3-19 17:13:04@
有能记下来的人类吗?
- 1
信息
- ID
- 1553
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 140
- 已通过
- 36
- 上传者