我正在编写一个程序,要求用户输入一个三位数字,然后将每个数字加上6,模数为10.
例如,如果我输入619,我将收到的输出是275。
我唯一的问题是当我输入100时,我会收到1360,而不是像我应该的那样766。
这是我到目前为止所做的:
int main()
{
//declaring variables
int numbers, newNumbers, input;
int newInput = 0;
//User input
printf("Enter a three-digit number: ");
//reads input (%d) and stores it as "input" (&input)
scanf("%d", &input);
//check if input is 3 digits. If not, print message
if(input < 100 || input > 999)
{
printf("Invalid input, the number must be between 100 and 999 \n");
return 0;
}
//loops program until input is 0
while(input > 0)
{
//modulus 10
numbers = input % 10;
//adds 6 to input. Modulus 10
newNumbers = (numbers + 6) % 10;
//if input > 10, calculates new input
if(input > 100)
newInput = newNumbers;
else if(input > 10)
newInput = (newNumbers * 10) + newInput;
else
newInput = (newNumbers * 100) + newInput;
input /= 10;
}
//prints result
printf("Output: %d \n", newInput);
return 0;
}
答案 0 :(得分:2)
在您的代码中,通过说
if(input > 100)
newInput = newNumbers;
else if(input > 10)
newInput = (newNumbers * 10) + newInput;
您未在TRUE条件下考虑数字100
和10
,而您也应该将它们计算在内。您需要更改if
条件以使用>=
,例如
if(input >= 100)
newInput = newNumbers;
else if(input >= 10)
newInput = (newNumbers * 10) + newInput;
答案 1 :(得分:0)
更简单的解决方案就是这个:
output = (input + 666) % 1000; //Add 6 to all numbers
if(input % 10 > 3) //Correct units carry
output-=10;
if(input % 100 > 30) //Correct tents carry
output-= 100;
它有效且易于扩展:)