簡體   English   中英

C語言對字符串的數值運算

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM