题解 | #数字阶梯求和#
数字阶梯求和
https://www.nowcoder.com/practice/c66df29f6c1c4dbba0bd51619210e082
//#include <endian.h> #include<bits/stdc++.h> #include <iostream> using namespace std; // 既要做精度乘 也要做精度加 // bug 做乘法的时候,重新声明了BIgInt // bug 在做加运算时,少算了carr. struct BigInt { int len ; int d[1000] ; BigInt() { memset(d , 0 , 1000) ; len = 0 ; } BigInt(int a) { memset(d , 0 , 1000) ; len = 0 ; while(a != 0) { d[len++] = a%10 ; a = a/10 ; } } BigInt operator*(const int & a) { BigInt res ; int carr = 0 ; int i = 0 ; // cout<<this->len ; while( i < len ) // 当i { res.d[i] =( carr +d[i] * a)%10; carr = d[i] * a /10 ; i++ ; } if(carr !=0) { res.d[i++] = carr ; } res.len = i; return res ; } BigInt operator+(BigInt biga ) { //加法 int carr = 0 ; BigInt res ; int i = 0 ; while(i< len && i < biga.len) { res.d[i] = (carr + d[i] + biga.d[i]) %10; carr = (carr + d[i] + biga.d[i] ) /10 ; i++ ; } while(i < len) { if(carr != 0) { res.d[i] = (carr + d[i]) %10 ; carr = (carr + d[i]) /10 ; i++ ; } else { res.d[i] = d[i] ; i++ ; } } while(i < biga.len) { if(carr != 0) // 如果carr不为0,那么就继续 { res.d[i] = (carr + biga.d[i]) %10 ; carr = (carr + biga.d[i]) /10 ; i++ ; } else { res.d[i] = biga.d[i] ; i++ ; } } if(carr != 0) { res.d[i++] = carr; } res.len = i; return res ; } BigInt operator=(BigInt& a) { len=a.len ; for(int i =0 ; i < len ; ++ i) { d[i] = a.d[i] ; } // a.len= 0 ; // memset(a.d, 0 , a.len ) ; return *this ; } BigInt operator=(BigInt&& a) { len=a.len ; for(int i =0 ; i < len ; ++ i) { d[i] = a.d[i] ; } a.len= 0 ; memset(a.d, 0 , a.len ) ; return *this ; } BigInt(const BigInt & a ) { memset(d, 0 , 1000) ; len = a.len ; for(int i =0 ; i < a.len ; ++ i ) { d[i] = a.d[i] ; } } BigInt(const string & s ) { len = 0 ; memset(d , 0 , 1000) ; for(int i = s.size()-1 ; i >= 0 ; --i ) { d[len++] = s[i] - '0'; } } }; int main() { int a ; int n ; while(cin>>a>>n) { int t = 1; // cout<<"it.len"<<it.len<<endl ; vector<BigInt> rtmp; char c = '0' + a ; string s ; s.clear() ; for(int i = 0 ; i < n ; ++ i) { s+=c ; BigInt it(s); // cout<<endl ; rtmp.push_back(it) ; } // cout<<"rtmp.size()"<<rtmp.size()<<endl ; BigInt res(0) ; for(int i = 0 ; i <rtmp.size() ; ++i) { res = (res + rtmp[i ] ) ; } for(int i =res.len -1 ; i >= 0 ; i-- ) { cout<<res.d[i]; } cout<<endl ; } } // 64 位输出请用 printf("%lld")