社区讨论
abc_b help
学术版参与者 6已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @ltu5gka7
- 此快照首次捕获于
- 2024/03/16 21:54 2 年前
- 此快照最后确认于
- 2024/03/17 01:01 2 年前
CPP
#include <iostream>
#include <string>
#include <cmath>
#include <iomanip>
using namespace std;
string fixedNum( string a ) {
if ( a.size() == 1 )
return a;
for ( int i = 0; i < a.size(); i++ )
if ( '1' <= a[i] && a[i] <= '9' )
return a.substr( i, a.size() );
return "0";
}
string calcAddition( string a, string b ) {
a = fixedNum(a);
b = fixedNum(b);
int as = a.size(), bs = b.size(), d = as > bs ? as - bs : bs - as;
string s = "0", t = "0";
for ( int i = 0; i < d; i++ )
as > bs ? t += "0" : s += "0";
s += a;
t += b;
for ( int i = s.size() - 1; i >= 1; i-- ) {
s[i] += t[i] - '0';
if ( s[i] > '9' ) {
s[i] -= 10;
s[i - 1]++;
}
}
return s[0] == '0' ? s.substr( 1, s.size() ) : s;
}
string calcSubtraction( string a, string b ) {
int as = a.size(), bs = b.size(), d = as - bs;
string s = "", t = "";
for ( int i = 0; i < d; i++ )
t += "0";
s += a;
t += b;
for ( int i = s.size() - 1; i >= 0; i-- ) {
if ( s[i] < t[i] ) {
s[i] += 10;
if ( s[i - 1] >= '1' )
s[i - 1]--;
else {
int j = i - 1;
while ( s[j] == '0' )
s[j--] += 9;
s[j]--;
}
}
s[i] -= ( t[i] - '0' );
}
if ( s.size() == 1 )
return s;
for ( int i = 0; i < s.size(); i++ ) {
if ( '1' <= s[i] && s[i] <= '9' )
return s.substr( i, s.size() );
}
return "0";
}
int main() {
string a, b, c, sum = "0", cnt = "1";
bool j1 = false;
cin >> a;
b = "10";
if ( a == "0" ) {
cout << 0 << endl;
return 0;
} else if ( a[0] == '-' && b[0] == '-' ) {
a = a.substr( 1, a.size() );
b = b.substr( 1, b.size() );
} else if ( a[0] == '-' ) {
j1 = true;
a = a.substr( 1, a.size() );
} else if ( b[0] == '-' ) {
j1 = true;
b = b.substr( 1, b.size() );
} else;
c = b;
int as = a.size(), bs = b.size(), cs, d = as - bs;
for ( int i = 0; i < d - 1; i++ ) {
c += "0";
cnt += "0";
}
cs = c.size();
bool j2 = false;
while ( c != b ) {
while ( as > cs || as == cs && a >= c ) {
j2 = true;
a = calcSubtraction( a, c );
as = a.size();
sum = calcAddition( sum, cnt );
}
c = c.substr( 0, c.size() - 1 );
cnt = cnt.substr( 0, cnt.size() - 1 );
cs = c.size();
}
while ( as > bs || as == bs && a >= b ) {
j2 = true;
a = calcSubtraction( a, b );
sum = calcAddition( sum, cnt );
as = a.size();
}
int d1 = 0;
if ( j1 && j2 ) {
cout << '-';
d++;
}
double naum = 0;
for (int i = 0; i < sum.size(); ++i) {
naum = 10 * naum + (sum[i] - '0');
}
if (naum > 0 && d == 1) {
cout << naum ;
return 0;
} else
cout << fixed << setprecision (0) << naum + 1 << endl;
return 0;
}
回复
共 8 条回复,欢迎继续交流。
正在加载回复...