// C = A + B,A和B都是正整数 vector<int> add(vector<int> &A,vector<int> &B){ vector<int> C; int t = 0; for (int i = 0;i < A.size() || i < B.size();i++){ if (i < A.size()) t += A[i]; if (i < B.size()) t += B[i]; C.push_back(t % 10); t /= 10;// 进位到下一位 } if (t) C.push_back(1);// 判断最高位是否需要进位 return C; }
intmain(){ string a,b; vector<int> A,B;
cin >> a >> b; for (int i = a.size()-1;i >= 0;i--) A.push_back(a[i] - '0'); for (int i = b.size()-1;i >= 0;i--) B.push_back(b[i] - '0');
auto C = add(A,B); for (int i = C.size()-1;i >= 0;i--) printf("%d",C[i]);
intget(int n){ // 计算n一共有多少位数字 int res = 0; while (n){ res ++; n /= 10; } return res; }
intcount(int n,int i){ int res = 0,dgt = get(n);
for (int j = 1;j <= dgt;j ++){ // 从高位到低位(从左往右)枚举每一位数字 // p表示第j位上的权,l表示第j位左边的数,r表示第j位右边的数,dj表示第j位上的数字 int p = pow(10,dgt - j),l = n / p / 10,r = n % p,dj = n / p % 10; /* 情况1: 若i != 0,方案数为:i*p; 若i == 0,需要处理前导零,第一位数字不能为0,方案数为:(i-1)*p; */ if (i) res += l*p; else res += (l-1)*p; /* 情况2: 若i == dj,方案数为:r + 1: 若i < dj,方案数为:p。 */ if (i == dj) res += r + 1; if (i < dj) res += p; } return res; // 不要写在循环里面了 }
intmain(){ IOS; int a,b; while (cin >> a >> b,a){ if (a > b) swap(a,b); for (int i = 0;i <= 9;i ++) cout << count(b,i) - count(a-1,i) << ' '; cout << '\n'; }