gpt4 book ai didi

c++ - 程序只从偶数输出中减1

转载 作者:行者123 更新时间:2023-11-30 05:31:11 26 4
gpt4 key购买 nike

所以我不明白为什么会这样。该程序要求用户输入一个整数,然后将数字加倍或增加三倍,具体取决于它是偶数还是奇数。问题在于,对于偶数整数循环,每次循环迭代都会将第一个数字减去 1。奇数循环与偶数循环完全相同,除了将数字增加三倍而不是加倍,而且它工作得很好。有什么想法吗?

例如:

输入:12
预期输出:1122
实际输出:1121

输入:13
预期输出:111333
实际输出:111333

//This program asks the user to enter an integer and depending on whether the integer is even or odd, doubles or triples
//each digit in the integer respectively. It then reads out the result and asks the user if they would like to enter
//another integer and run the program again.
int main()
{
string restart;
int integer, remainder;

while (restart != "n" && restart !="N")
{
cout << "Enter an integer: ";
cin >> integer;
cout << endl;

//Creates variable "temp" and "mycount" and divides "integer" by 10 until remainder is 0 and counts number of
//steps to do this to count the number of significant digits of the integer
int temp = integer, mycount = 0;
while (temp != 0)
{
temp = temp / 10;
mycount++;
}

//Computes if the integer is even or odd by determining the remainder: 0 remainder = even, Non-0 remainder = odd
//Creates two integer variables "exponent" and "sum" and sets them to 0
//Assigns variable "temp" to the integer value
remainder = integer % 2;
int exponent = 0;
int sum = 0;
temp = integer;

//If integer is even, doubles each significant digit
if (remainder == 0)
{
//Begins for loop which runs for the number of times equal to the number of significant digits stored in "mycount"
for (int i = mycount; i > 0; i--)
{
//Stores current significant digit in "digit"
//Removes current significant digit by dividing by 10
//Multiplies current significant digit by 11 and stores it in "timesTwo"
//Multiplies current significant digit by 10^exponent then adds it to other modified digits
//Adds 2 to current exponent to increase digit multiplier by 100
int digit = temp % 10;
temp = temp / 10;
int timesTwo = digit * 11;
sum = (timesTwo * pow(10, exponent)) + sum;
exponent = exponent + 2;
cout << sum << endl;
cout << endl;
}

cout << "Number is even, doubling each digit in the integer ..." << endl;
cout << sum << endl;
}

//If integer is odd this runs the same as the above function except it triples the digit and adds 3 to the multiplier
else
{
for (int i = mycount; i > 0; i--)
{
int digit = temp % 10;
temp = temp / 10;
int timesThree = digit * 111;
sum = (timesThree * pow(10, exponent)) + sum;
exponent = exponent + 3;
cout << sum << endl;
}
cout << "Number is odd, tripling each digit in the integer ..." << endl;
cout << "Result: " << sum << endl;
}

cout << "Would you like to enter another integer? (y/n): ";
cin >> restart;
}

return 0;
}

最佳答案

为了调试它,我会在第一个循环中打印所有输入,而不仅仅是输出。我能看到的唯一可疑之处是 pow() 返回一个 float ,这可能会在转换回整数时向下舍入。

为什么不完全避免 pow() 和隐式转换,而是使用每轮相乘的整数因子?

sum = (timesTwo * factor) + sum;
factor += 100;

顺便说一句:对于这两种情况,计算数字和使用不同的循环并不是真正必要的——您可以将程序的核心简化为类似

bool even = (integer & 1) == 0;
int digitFactor = even ? 11 : 111;
int stepFactor = even ? 100 : 1000;
int result = 0;
while(integer != 0) {
int digit = integer % 10;
result += digit * digitFactor;
integer /= 10;
digitFactor *= stepFactor;
}

关于c++ - 程序只从偶数输出中减1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35675547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com