繁体   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

/编写一个 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;

}

当我运行程序时它 output 相反的值例如我想打印 123456 而不是输出一二三四五六它输出六五四三二一。 我该如何解决?

由于数字是从右到左分解的,所以显示的 output 是相反的。 有几种方法可以解决此问题,即您可以使用堆栈来推送 output 值并按正确顺序获取它们。 您还可以创建一个字符串,例如,

string number = "";

number = last_number + " " + number;

好吧,您的逻辑中的问题是last_number = number % 10; 因为当你除以数字时,你得到最后一个元素,例如,如果你将 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

这行代码给你除以 10 的余数。所以 123%10 应该给你 last_number=3。

使用字符串的答案是正确的。 但是,如果您想使用 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);
}

如果您不想使用递归,您可以使用您现在使用的相同逻辑并将 last_number 值存储在堆栈中。 您可以在这里找到更多方法

您正在以相反的顺序获得结果,因为您通过模数运算 (%) 从末尾提取每个数字。

要以正确的顺序得到答案,您可以先反转原始数字,然后使用您正在使用的相同逻辑。

....
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