6

对于输入数字 232,我希望能够以文本形式写出数字:232。我有一个包含这些数字的数组

Array[0] = 2, Array[1] = 3, Array[2] = 2.

我写了一个

switch statement

它看到数字并将其打印为文本,例如 203 2。我不知道如何动态地将“三”转换为“三十”。假设我有更多的数字要拼写,比如 452,232。

4

4 回答 4

3

你不能独立处理数字,就这么简单。

例如,for 文本21是“二十”和“一”11的串联,但文本 for 不是“十”和“一”的串联。

此外,“1001”不会变成“一千零一百零一”。

您可以使用函数调用来降低逻辑复杂性,但您将需要逻辑来一次查看多个数字。

于 2012-12-07T14:25:23.390 回答
2

在 wikipedia查看这个实现。这可能是你想要的

如果链接损坏,直接从维基百科复制。
如果要编写改进的解决方案,请先查看链接

#include <string>
#include <iostream>
using std::string;

const char* smallNumbers[] = {
  "zero", "one", "two", "three", "four", "five",
  "six", "seven", "eight", "nine", "ten",
  "eleven", "twelve", "thirteen", "fourteen", "fifteen",
  "sixteen", "seventeen", "eighteen", "nineteen"
};

string spellHundreds(unsigned n) {
  string res;
  if (n > 99) {
    res = smallNumbers[n/100];
    res += " hundred";
    n %= 100;
    if (n) res += " and ";
  }
  if (n >= 20) {
    static const char* Decades[] = {
      "", "", "twenty", "thirty", "forty",
      "fifty", "sixty", "seventy", "eighty", "ninety"
    };
    res += Decades[n/10];
    n %= 10;
    if (n) res += "-";
  }
  if (n < 20 && n > 0)
    res += smallNumbers[n];
  return res;
}


const char* thousandPowers[] = {
  " billion", " million",  " thousand", "" };

typedef unsigned long Spellable;

string spell(Spellable n) {
  if (n < 20) return smallNumbers[n];
  string res;
  const char** pScaleName = thousandPowers;
  Spellable scaleFactor = 1000000000;   // 1 billion
  while (scaleFactor > 0) {
    if (n >= scaleFactor) {
      Spellable h = n / scaleFactor;
      res += spellHundreds(h) + *pScaleName;
      n %= scaleFactor;
      if (n) res += ", ";
    }
    scaleFactor /= 1000;
    ++pScaleName;
  }
  return res;
}

int main() {
#define SPELL_IT(x) std::cout << #x " " << spell(x) << std::endl;
  SPELL_IT(      99);
  SPELL_IT(     300);
  SPELL_IT(     310);
  SPELL_IT(    1501);
  SPELL_IT(   12609);
  SPELL_IT(  512609);
  SPELL_IT(43112609);
  SPELL_IT(1234567890);
  return 0;
}
于 2012-12-07T14:48:27.457 回答
1

考虑一下数字的位置

在你的情况下

如果 3 在位置 1: Array[1]=3 then cout "thirty"

如果 3 在位置 2: Array[2]=3 then cout "three hundred"

依此类推,考虑非标准情况,例如十一或一百零一等等。

于 2012-12-07T14:26:44.510 回答
-1
#include <iostream>
#include <conio.h>
#include <stdio.h>
using namespace std;

int main() {

setlocale(LC_ALL,"Turkish");
int ikibsm, yuzler, sayi,birler,onlar;
clrscr();
do {

printf("\nSayıyı giriniz:");
scanf("%d", &sayi);

yuzler=sayi/100;
ikibsm=sayi%100;
onlar=ikibsm/10;
birler=ikibsm%10;

switch (yuzler)
{
    case 0: printf("") ;break;
    case 1: printf("Yüz ") ;break;
    case 2: printf("İkiyüz ") ;break;
    case 3: printf("Üçyüz ") ;break;
    case 4: printf("Dört Yüz ") ;break;
    case 5: printf("Beş Yüz ") ;break;
    case 6: printf("Altı Yüz ") ;break;
    case 7: printf("Yedi Yüz ") ;break;
    case 8: printf("Sekiz Yüz ") ;break;
    case 9: printf("Dokuz Yüz ") ;break;
}


 switch (onlar)
{
    case 1: printf("On ") ;break;
    case 2: printf("Yirmi ") ;break;
    case 3: printf("Otuz ") ;break;
    case 4: printf("Kırk ") ;break;
    case 5: printf("Elli ") ;break;
    case 6: printf("Altmış ") ;break;
    case 7: printf("Yetmiş ") ;break;
    case 8: printf("Seksen ") ;break;
    case 9: printf("Doksan ") ;break;
}

switch(birler)
{
    case 1: printf("Bir ") ;break;
    case 2: printf("İki ") ;break;
    case 3: printf("Üç ") ;break;
    case 4: printf("Dört ") ;break;
    case 5: printf("Beş ") ;break;
    case 6: printf("Altı ") ;break;
    case 7: printf("Yedi ") ;break;
    case 8: printf("Sekiz ") ;break;
    case 9: printf("Dokuz ") ;break;
}
} while (sayi<1000);
}
于 2020-05-09T21:16:36.920 回答