Trans在 creatnx的商店 购买了一个计算器。不幸的是,这是假的。它有很多错误。其中之一是将两个数字相加而不携带。
表达式示例:12 + 9
在他的计算器中将有结果11
。给定形式为a + b
的表达式,请输出该计算器的结果。
约束:
1≤T≤100
1≤a,b≤109
我的代码通过了1 ≤ a, b ≤ 9
测试用例
但是由于最初的限制而失败。
找不到我的代码给出错误答案的情况。
我的代码:
#include <iostream>
#include<string>
#define ll long long int
using namespace std;
int main()
{
ll t;
cin>>t;
while(t--){
string a, b;
cin>>a>>b;
ll max_last = max(a.size(), b.size());
ll min_last = min(a.size(), b.size());
ll result[max_last];
ll i=max_last-1;
for(ll j= min_last-1; j>=0; i--, j--){
ll sum = a[i]-'0' + b[j]-'0';
result[i] = sum ;
}
while(i>=0){
result[i] = a[i]-'0';
i--;
}
ll sum = 0;
for(ll i=0; i<max_last; i++){a
sum = sum*10 + result[i]%10;
}
cout<<sum<<"\n";
}
return 0;
}
测试人员代码:
#include <bits/stdc++.h>
using namespace std;
signed main() {
int t;
cin >> t;
assert(1 <= t && t <= 100);
while(t--) {
int a, b;
cin >> a >> b;
assert(1 <= a && a <= 1'000'000'000);
assert(1 <= b && b <= 1'000'000'000);
vector<int> A, B;
while(a) {
A.push_back(a % 10);
a /= 10;
}
while(b) {
B.push_back(b % 10);
b /= 10;
}
while(A.size() < B.size()) A.push_back(0);
while(B.size() < A.size()) B.push_back(0);
for(int i = 0; i < A.size(); i++) {
A[i] += B[i];
}
int ans = 0;
reverse(begin(A), end(A));
for(auto it: A) {
ans = ans * 10 + it % 10;
}
cout << ans << endl;
}
}
答案 0 :(得分:0)
您有一些逻辑错误。仅当a.size()> b.size()
时,第一个循环才有效#include <iostream>
#include<string>
#include<algorithm>
#define ll long long int
using namespace std;
int main()
{
ll t;
cin>>t;
while(t--){
string a, b;
cin>>a>>b;
if ( a.size() < b.size() )
std::swap(a,b);
ll max_last = max(a.size(), b.size());
ll min_last = min(a.size(), b.size());
ll result[max_last];
ll i=max_last-1;
for(ll j= min_last-1; j>=0; i--, j--){
result[i] = ( a[i]-'0' + b[j]-'0') % 10 ;
}
while(i>=0){
result[i] = (a[i]-'0') % 10;
i--;
}
ll sum = 0;
for(ll i=0; i< max_last; i++){
sum = sum*10 + result[i];
}
cout<<sum<<"\n";
}
return 0;
}