[英]Numerical operations on strings with C
我被要求制作一個計算器,將輸入作為一個字符串,這樣我們就可以用長數來計算結果也應該是一個字符串。 我嘗試了添加部分,但它不適用於兩個不同長度的數字。 有人能告訴我我的代碼出錯的地方以及我如何解決它? 還有一個關於如何使用這個原理划分的想法。
i = strlen(first);
j = strlen(second);
x = 0;
while(1)
{
z = (first[i-1] - 48) + (second[j-1] - 48) + carry;
carry = z/10;
result1[x] = z%10 + 48;
x++;
i--;
j--;
if(i==0 && j==0)
{ if(carry!=0)
result1[x] = carry + 48;
break;
}
}
i = strlen(result1);
for (i = 0, j = strlen(result1)-1; i < j; i++, j--)
{
c = result1[i];
result1[i] = result1[j];
result1[j] = c;
}
puts(result1);
你必須用每個字符串中的最低有效數字開始求和; 如果總和超過9,則將1轉到下一個更有效的數字總和。 就像你在紙上做的那樣。 這也意味着你必須組織一些事情,以便知道每個字符串(數字)的長度,並在較短的數字前面處理“隱式零”。
z = (first[i-1] - 48) + (second[j-1] - 48) + carry;
如果i或j中的一個為零或負數,則無效。 如果你想繼續循環直到兩個字符串都被消耗掉,那么你可以使用?:來避免不安全地訪問數組。 您可能還會發現在循環開始時減少i和j更容易。
if(i==0 && j==0)
如果i!= j,這將不起作用。 您需要找到一種更好的方法來終止循環。 (通過上面仔細的條件邏輯,你甚至可以繼續循環,直到進位為零。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.