简体   繁体   English

C++ 程序,其中,读取一个六位数 integer 作为来自用户的输入和 output 通过 for/While 循环以字表示的每个数字

[英]C++ program in which, read a six digit integer as input from user and output each of its digit in words by for/ While loop

/Write a C++ program in which, read a six digit integer as input from user and output each of its digit in words by using loop./ /编写一个 C++ 程序,其中,读取一个六位数的 integer 作为用户的输入,并使用循环读取 output 每个字的数字。/

#include <iostream>
using namespace std;
int main()
{
    int number, last_number, count = 0;
    cout << "Please enter a six digit number:" << endl;
    cin >> number;

    while (count < 6)
    {

         last_number = number % 10;


        if (last_number == 0)
            cout << "Zero ";
        else if (last_number == 1)
            cout << "One ";
        else if (last_number == 2)
            cout << "Two ";
        else if (last_number == 3)
            cout << "Three ";
        else if (last_number == 4)
            cout << "Four ";
        else if (last_number == 5)
            cout << "Five ";
        else if (last_number == 6)
            cout << "six ";
        else if (last_number == 7)
            cout << "Seven ";
        else if (last_number == 8)
            cout << "Eight ";
        else if (last_number == 9)
            cout << "Nine ";


        number = number / 10;
        count++;


    }
    cout << endl;
    return 0;

}

when i run the program it output opposite values eg I want to print 123456 instead of outputting one two three four five six it outputs six five four three two one.当我运行程序时它 output 相反的值例如我想打印 123456 而不是输出一二三四五六它输出六五四三二一。 How do i fix this?我该如何解决?

Since the number is broken down from right to left, the output shown is in reverse.由于数字是从右到左分解的,所以显示的 output 是相反的。 There are several ways to fix this ie you can use stack for pushing the output values and getting them in correct order.有几种方法可以解决此问题,即您可以使用堆栈来推送 output 值并按正确顺序获取它们。 You can also create a string for example,您还可以创建一个字符串,例如,

string number = "";

number = last_number + " " + number;

well the problem in your logic is last_number = number % 10;好吧,您的逻辑中的问题是last_number = number % 10; because when you divide the number u get the last element for example if you divide 12345 with 10 you will get 5 as a remainder and that is where the problem arises try using string and a for loop it will be easier因为当你除以数字时,你得到最后一个元素,例如,如果你将 12345 除以 10,你将得到 5 作为余数,这就是问题出现的地方尝试使用字符串和 for 循环会更容易

#include <iostream>
using namespace std;
int main()
{
    string  number;
    cout << "Please enter a six digit number" << endl;
    cin >> number;

    for (int i = 0; i < number.length(); i++) 
    {
        if (number[i] == '0')
            cout << "Zero ";
        else if (number[i] == '1')
            cout << "One ";
        else if (number[i] == '2')
            cout << "Two ";
        else if (number[i] == '3')
            cout << "Three ";
        else if (number[i] == '4')
            cout << "Four ";
        else if (number[i] == '5')
            cout << "Five ";
        else if (number[i] == '6')
            cout << "six ";
        else if (number[i] == '7')
            cout << "Seven ";
        else if (number[i] == '8')
            cout << "Eight ";
        else if (number[i] == '9')
            cout << "Nine ";

    }
    return 0;
}
last_number=number%10

This line of code gives you the remainder of the number when divided by 10. So 123%10 shall give you last_number=3.这行代码给你除以 10 的余数。所以 123%10 应该给你 last_number=3。

The answers using a string are correct.使用字符串的答案是正确的。 However, if you want to use an integer, here's another way using recursion:但是,如果您想使用 integer,这是使用递归的另一种方式:

#include<iostream>
using namespace std;
void print_digit(int last_number){
    if (last_number == 0)
            cout << "Zero ";
        else if (last_number == 1)
            cout << "One ";
        else if (last_number == 2)
            cout << "Two ";
        else if (last_number == 3)
            cout << "Three ";
        else if (last_number == 4)
            cout << "Four ";
        else if (last_number == 5)
            cout << "Five ";
        else if (last_number == 6)
            cout << "six ";
        else if (last_number == 7)
            cout << "Seven ";
        else if (last_number == 8)
            cout << "Eight ";
        else if (last_number == 9)
            cout << "Nine ";
}
void get_digits(int number){
    if(number<10){
        print_digit(number);
        return;
    }
    get_digits(number/10);
    print_digit(number%10);
}
int main(){
    int number=12345;
    get_digits(number);
}

If you don't want to use recursion, you can use the same logic you are using now and store the last_number values in a stack.如果您不想使用递归,您可以使用您现在使用的相同逻辑并将 last_number 值存储在堆栈中。 You can find more ways here您可以在这里找到更多方法

You are getting the result in reverse order because you are extracting each digit from the end by means of modulus operation (%).您正在以相反的顺序获得结果,因为您通过模数运算 (%) 从末尾提取每个数字。

To get the answer in correct order, you can reverse the original number first and then use the same logic you are using.要以正确的顺序得到答案,您可以先反转原始数字,然后使用您正在使用的相同逻辑。

....
cin >> number;
int tmp_number = 0;  //temporary number to store reverse value of "number"
while ( number > 0 )
{
   tmp_number = tmp_number * 10 + number % 10;
   number = number / 10;
}

number = tmp_number;
while (count < 6)
....

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM