我應該解決以下問題:
現在撰寫一個程式來計算迭代交叉和。這是通過迭代交叉總和直到您得到一位數來計算的。示例:4391873 -> 35 -> 8。
注意:您需要嵌套回圈并理解交叉總和的含義,假設您有數字 14,那么它的交叉總和是 5 = 1 4。另一個詞可能是水平校驗和。
我有以下代碼,它也計算簡單的交叉總和,但它不適用于示例。
#include <stdio.h>
#include <stdbool.h>
int main()
{
int n = 0;
int c = 0;
printf("please give us your number: ");
scanf("%d", &n);
while((c==0) || (c>10)){
while ((n != 0) || (c>10)) {
if (n % 10 != 0) {
c = c n % 10;
n = n / 10;
}
else {
n = n / 10;
}
}
}
printf("%d", c);
return 0;
}
我曾考慮過鏈接兩個 while 回圈,但我無法正確計算此處的交叉和的交叉和。你有這方面的建議嗎?
編輯:我發布了代碼。
uj5u.com熱心網友回復:
我寫過這個:
#include <stdio.h>
int main()
{
int sum=0, dsum=0, mod=0,n;
printf("please give us your number: ");
scanf("%d", &n);
printf("\nCross sum: %d",n);
while(n>10)
{
mod= n%10;
sum=sum mod;
n=n/10;
if (n<10)
{
sum=sum n;
n=sum;
dsum=sum;
printf(" -> %d", dsum);
sum=0;
}
}
if(dsum==0)
{
printf("-> %d", n);
}
printf("\n");
return 0;
}
uj5u.com熱心網友回復:
在外回圈的每次迭代中,您需要將 C 分配給 N,將 0 分配給 C。以下解決方案使用 Ada 語言。
-- Now write a program to calculate the iterated cross sum.
-- This is calculated by iterating the cross sum until you arrive
-- at a single digit number. Example: 4391873 -> 35 -> 8.
-- Note: You need nested loops.
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
procedure Main is
Num : Natural;
Temp : Natural;
Sum : Natural := 0;
begin
Put ("Enter an positive integer: ");
Get (Num);
Temp := Num;
loop
while Temp > 0 loop
Sum := Sum (Temp rem 10);
Temp := Temp / 10;
end loop;
exit when Sum < 10;
Temp := Sum;
Sum := 0;
end loop;
Put_Line ("Original number:" & Num'Image & " cross sum:" & Sum'Image);
end Main;
您將不得不重新考慮您的外回圈終止,以便它使用 C 語法作業。Ada 示例在將 Sum 分配給 Temp 并將 0 分配給 Sum 之前退出外部回圈。
uj5u.com熱心網友回復:
您正在使用零標記值:
while((c==0) || (c>10))
但是如果我輸入0,這將進入無限回圈。您想c從 0開始計算n,然后測驗是否c大于 9。如果是,則比您想替換n為c。這不是 C 中的預包裝回圈之一,因此您可能需要break或,。
while ((n != 0) || (c>10))
內回圈是錯誤的。它不應該依賴于c;擺脫那個c>10。
if (n % 10 != 0)
這是一個多余的測驗;0 % 10 == 0,所以這可以簡化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/361340.html
標籤:C
