2016-02-19 62 views
1
#define REP(i,a,b) for(int i = a; i < b; i++) 
#define FOR(i,n) REP(i,0,n) 
#include<iostream> 
#include<algorithm> 
#include<stdio.h> 
#include<string> 

using namespace std; 

以下函數是通過字符串方法彙總兩個大整數的函數。輸入可以大於long long int的限制。我該如何解決它? libC++ abi.dylib:以std :: invalid_argument:stoi類型未捕獲的異常終止:無轉換

string string_add(string a, string b) { 
    string new_str = ""; 
    reverse(a.begin(), a.end()); 
    reverse(b.begin(), b.end()); 

    string long_s; 
    string short_s; 
    if (a.size() >= b.size()) { 
     long_s = a; 
     short_s = b; 
    } 
    else{ 
     long_s = b; 
     short_s = a; 
    } 
    int carry = 0; 
    int dif = long_s.size() - short_s.size(); 
    FOR(i, dif) 
     short_s += "0"; 
    FOR(i, long_s.size()) { 
     int hab = stoi(long_s.substr(i, 1)) + stoi(short_s.substr(i, 1)) + carry; 
     if (hab > 9) { 
      carry = 1; 
      hab -= 10; 
     } 
     else carry = 0; 

     new_str += to_string(hab); 
    } 
    if (carry != 0) new_str += to_string(carry); 
    reverse(new_str.begin(), new_str.end()); 
    return new_str; 
} 

以下是主要部分。

int main() { 
    while(!cin.eof()){ 
     int n; 
     string dp[251]; 
     cin >> n; 
     dp[0] = 1; 
     dp[1] = 1; 
     REP(i,2,n) 
      dp[i] = string_add(string_add(dp[i-2], dp[i-2]), dp[i-1]); 
     cout << dp[n]; 
    } 
    return 0; 
} 

Problem

如何解決這個問題?我認爲問題是'stoi'的輸入,但我不知道如何解決它。請幫忙。

+3

聽起來像你的字符串中有非數字,比如空格或換行符。 – stark

回答

1

cppreference

例外:性病:: invalid_argument如果沒有轉換可以進行

看起來,你就不能轉換成整數操作的字符串之一,因此stoi正在拋出異常。一般來說,瞭解所調用函數的所有失敗模式是一個好主意 - 您需要通過在程序邏輯中的某個地方捕獲此異常來處理此情況(或通過確保發送到stoi的字符串將總是可以轉換的,這在某些使用情況下可能是可能的)。

相關問題