C ++ программа добавления чисел без добавления переноса - PullRequest
0 голосов
/ 21 сентября 2018

Транс купил калькулятор в магазине 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;
  }
 }

1 Ответ

0 голосов
/ 21 сентября 2018

У вас были логические ошибки.Первый цикл работает только если 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...