【问题标题】:how to print multiple numbers to words如何将多个数字打印成单词
【发布时间】:2022-11-19 01:47:02
【问题描述】:

在我的代码中,我不明白为什么不打印零我做了我知道的所有可能的解决方案但它不打印零。

#include <iostream>
using namespace std;

int main(){
    int digits; 
    int numberOne = 0;
    int integer;
    
    cout<<"Enter the number: ";
    cin>>digits;
    while (digits != 0) {
        numberOne = (numberOne * 10) + (digits % 10);
        digits /= 10;
    }
    for (integer = numberOne; integer > 0; integer = integer / 10){
        switch (integer  % 10) {
            case 0:
                cout<<"Zero\n";
                break;
            case 1:
                cout<<"One\n";
                break;
            case 2:
                cout<<"Two\n";
                break;
            case 3:
                cout<<"Three\n";
                break;
            case 4:
                cout<<"Four\n";
                break;
            case 5:
                cout<<"Five\n";
                break;
            case 6:
                cout<<"Six\n";
                break;
            case 7:
                cout<<"Seven\n";
                break;
            case 8:
                cout<<"Eight\n";
                break;
            case 9:
                cout<<"Nine\n";
                break;
        }
    }
        return 0;
    }

零不打印我该如何解决? 预期输出为 900(九零零),但在我的情况下不打印零。帮助谢谢。

【问题讨论】:

    标签: c++


    【解决方案1】:

    因为在这一行中:

    for (integer = numberOne; integer > 0; integer = integer / 10){
    

    循环仅在integer&gt;0 时继续。因此你永远不会看到“零”。

    【讨论】:

      【解决方案2】:

      为什么它不打印零?看看你的循环

      for (integer = numberOne; integer > 0; integer = integer / 10){
      

      如果integer 等于零,则永远不会进入循环。你需要在你的循环中更聪明一点。如何计算数字?

      int num_digits = 0;
      while (digits != 0) {
          numberOne = (numberOne * 10) + (digits % 10);
          digits /= 10;
          ++num_digits;
      }
      

      现在您有了位数,您可以在第二个循环中使用它

      for (integer = numberOne; num_digits > 0; integer = integer / 10, --num_digits) {
          ...
      }
      

      您仍然需要将零视为一种特殊情况,因为如果用户输入 0 然后 num_digits 将等于零,您将不会再次打印任何内容。我会让你自己想办法解决这个问题。

      【讨论】:

        【解决方案3】:
        #include <iostream>
        using namespace std;
        
        int main(){
            int digits; 
            int arrayLength = 10;  
            
            cout<<"Enter the number: ";
            cin>>digits;
            
            string reverse_number[arrayLength]; //array to store the string of numbers like "Zero"
            int array_counter=0;
            while (digits != 0) {
                switch (digits  % 10) {
                    case 0:
                        reverse_number[array_counter++] = "Zero";
                        break;
                    case 1:
                        reverse_number[array_counter++] = "One";
                        break;
                    case 2:
                        reverse_number[array_counter++] = "Two";
                        break;
                    case 3:
                        reverse_number[array_counter++] = "Three";
                        break;
                    case 4:
                        reverse_number[array_counter++] = "Four";
                        break;
                    case 5:
                        reverse_number[array_counter++] = "Five";
                        break;
                    case 6:
                        reverse_number[array_counter++] = "Six";
                        break;
                    case 7:
                        reverse_number[array_counter++] = "Seven";
                        break;
                    case 8:
                        reverse_number[array_counter++] = "Eight";
                        break;
                    case 9:
                        reverse_number[array_counter++] = "Nine";
                        break;
                }
                digits /=10;
            }
                int num_digits = array_counter;
                for (int i = 0; i < num_digits; i++) {
                    cout << reverse_number[--array_counter] <<" ";
                }
                return 0;
            }
        

        在执行 900 时没有显示零的原因是因为当您将 900 反转为 009 时,没有提到处理 009 中被忽略的前导零的条件。为此,最好的方法是将它们存储在其他地方,例如字符串或数组。您也可以在转换时将数字单词直接存储到数组中,这样就不会丢失前导零。

        【讨论】:

          【解决方案4】:

          其他答案已经解决了您代码的主要问题。
          本回答重点关注帖子标题:如何将多个数字打印成单词?

          • 首先,我会考虑使用字符串数组而不是开关。
            为了检索给定数字的字符串,您只需索引该数组即可。
            (见下面的digits[c - '0']

          • 此外,如果允许将数字转换为字符串,则代码将简化为遍历该字符串并将每个字符转换为单词。
            您可以直接从标准输入中将数字作为字符串读取,或者对整数使用 std::to_string
            另请注意,当从数字字符串中读取字符 c 时,c - '0' 会为您提供一个介于 09 之间的整数,您可以将其用作数组索引。

          Demo

          #include <array>
          #include <iostream>
          #include <string>  // to_string
          
          std::array<std::string, 10> digits{
              "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"
          };
          
          void digits_to_words(int n) {
              for (unsigned char c : std::to_string(n)) {
                  std::cout << digits[c - '0'] << "
          ";
              }
          }
          
          int main() {
              for (int n : { 0, 5, 105, 900 }) {
                  std::cout << "Number: " << n << "
          ";
                  digits_to_words(n);
                  std::cout << "
          ";
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-24
            • 1970-01-01
            相关资源
            最近更新 更多