Помогите решить задачу на C++

Тема в разделе "ASM, С/С++, Delphi, Java", создана пользователем Froize, 2 окт 2015.

Метки:
  1. Froize

    Froize Создатель

    Регистр.:
    30 ноя 2012
    Сообщения:
    29
    Симпатии:
    3
    Составить программу, которая для любого натурального числа печатает
    количество цифр в записи этого числа.
    Или вот эту:
    Напишите программу, которая читает натуральное число в десятичном
    представлении, а на выходе выдает это же число в десятичном представлении и на
    естественном языке. Например: 7 - семь, 204 - двести четыре, 52 - пятьдесят два.

    Обе должны использовать оператор выбора switch.
     
  2. nayman

    nayman Писатель

    Регистр.:
    11 дек 2013
    Сообщения:
    9
    Симпатии:
    1
    Примерно вот так:

    # include <stdio.h>
    # include <math.h>
    unsigned int y, n1, n2;
    void main ()

    { printf("\n Vvedite chislo:");
    scanf("%d", &y);

    n1=(y)/(10);
    n2=(y)%(10);

    switch (n1)
    { case 1:
    switch (n2)
    { case 0: printf("desyat`"); break;
    case 1: printf("odinnadcat`"); break;
    case 2: printf("dvenadcat`"); break;
    case 3: printf("trinadcat`"); break;
    case 4: printf("chetirnadcat`"); break;
    case 5: printf("piatnadcat`"); break;
    case 6: printf("shestnadcat`"); break;
    case 7: printf("semnadcat`"); break;
    case 8: printf("vosemnadcat`"); break;
    case 9: printf("deviatnadcat`"); break;
    };
    break;
    case 2: printf("dvadcat`"); break;
    case 3: printf("tridcat`"); break;
    case 4: printf("sorok"); break;
    case 5: printf("piat`desiat"); break;
    case 6: printf("shest`desiat"); break;
    case 7: printf("semdesiat"); break;
    case 8: printf("vosemdesiat"); break;
    case 9: printf("devianosto"); break;
    };
    if (n1!=1)
    switch (n2)
    { case 1: printf("odin"); break;
    case 2: printf("dva"); break;
    case 3: printf("tri"); break;
    case 4: printf("chetire"); break;
    case 5: printf("piat`"); break;
    case 6: printf("shest`"); break;
    case 7: printf("sem`"); break;
    case 8: printf("vosem`"); break;
    case 9: printf("deviat`"); break;
    }
    }
     
  3. Roflmao123

    Roflmao123 Писатель

    Регистр.:
    6 ноя 2015
    Сообщения:
    7
    Симпатии:
    0
    You should do your homework yourself or else you won't learn anything.
     
  4. lexxh6

    lexxh6 Создатель

    Регистр.:
    31 окт 2014
    Сообщения:
    12
    Симпатии:
    2
    Составить программу, которая для любого натурального числа печатает
    количество цифр в записи этого числа.
    Вот:
    #include <stdio.h>
    #include <ctype.h>
    #include <stdlib.h>
    #define MAXC 100
    main(){
    char s[MAXC];
    int c,i=0,n,k=0;
    while ((c=getchar())&&isdigit(c))
    s[i++] =c;
    s='\0';
    n=atoi(s);
    switch (n){
    case 0:
    printf("0 ili oshibka vvoda\n");
    break;
    default:
    while(n>0){
    n=n/10;
    k++;
    }
    printf("kol-vo:%d\n",i);
    break;
    }
    return 0;
    }
     
    Последнее редактирование: 9 ноя 2015
  5. lexxh6

    lexxh6 Создатель

    Регистр.:
    31 окт 2014
    Сообщения:
    12
    Симпатии:
    2
    Напишите программу, которая читает натуральное число в десятичном
    представлении, а на выходе выдает это же число в десятичном представлении и на
    естественном языке. Например: 7 - семь, 204 - двести четыре, 52 - пятьдесят два.
    Читает от 1 до 999999. При желании можно расширить. Тщательно не тестировалась.
    #include <stdio.h>
    #include <ctype.h>
    #include <stdlib.h>
    #include <math.h>
    #define MAXC 100
    void itos (int n,int i);
    main(){
    char s[MAXC];
    int c,i=0,n,k=0;
    while ((c=getchar())&&isdigit(c))
    s[i++] =c;
    s='\0';
    n=atoi(s);
    itos(n,i);
    return 0;
    }
    void itos(int n,int i) /*Печать n до 6 разрядов*/
    {
    int k;
    int flag=0;
    if (n>999999){
    printf("previshenie diapazona, ispolzuite 4islo do 999 999 \n");
    return;
    }
    while (i-->0)
    {
    k=n/((int)pow(10.0,i))%10;
    if(i+1==6||i+1==3)
    switch(k)
    {
    case 1: printf("sto "); break;
    case 2: printf("dvesti "); break;
    case 3: printf("trista "); break;
    case 4: printf("chetiresta "); break;
    case 5: printf("pyatsot "); break;
    case 6: printf("shestsot "); break;
    case 7: printf("semsot "); break;
    case 8: printf("vosemsot "); break;
    case 9: printf("devyatsot "); break;
    }
    if(i+1==5||i+1==2)
    switch(k)
    {
    case 1: flag=1; break;
    case 2: printf("dvadtsat "); break;
    case 3: printf("tridtsat "); break;
    case 4: printf("sorok "); break;
    case 5: printf("pyatdesyat "); break;
    case 6: printf("shestdesyat "); break;
    case 7: printf("semsdesyat "); break;
    case 8: printf("vosemdesyat "); break;
    case 9: printf("devyanosto "); break;
    }
    if(i+1==4||i+1==1){
    if (flag == 1){
    flag = 0;
    switch(k)
    {
    case 0: printf("desyat "); break;
    case 1: printf("odinnadcat "); break;
    case 2: printf("dvenadcat "); break;
    case 3: printf("trinadcad "); break;
    case 4: printf("4etirnadcat "); break;
    case 5: printf("pyatnadcat "); break;
    case 6: printf("shestnadcat "); break;
    case 7: printf("semnadcat "); break;
    case 8: printf("vosemnadcat "); break;
    case 9: printf("devyatnadcat "); break;
    }
    if(i+1==4)
    printf ("tisya4 ");
    }
    else{
    switch(k)
    {
    case 0:
    if (i+1==4)
    printf ("tisya4 ");
    break;
    case 1:
    if (i+1==4)
    printf("odna ");
    else if (i+1==1)
    printf("odin ");
    break;
    case 2:
    if (i+1==4)
    printf("dve ");
    else if (i+1==1)
    printf("dva ");
    break;
    case 3: printf("tri "); break;
    case 4: printf("4etire "); break;
    case 5: printf("pyat "); break;
    case 6: printf("shest "); break;
    case 7: printf("sem "); break;
    case 8: printf("vosem "); break;
    case 9: printf("devyat "); break;
    }
    if(i+1==4)
    if (k==1)
    printf("tisyacha ");
    else if (k>=2&&k<=4)
    printf("tisyachi ");
    else if (k>4)
    printf("tisyach ");
    }
    }
    }
    }
     
    Последнее редактирование: 9 ноя 2015
  6. vtatntpt

    vtatntpt Создатель

    Регистр.:
    16 ноя 2015
    Сообщения:
    8
    Симпатии:
    1
    Согласен, ты должна сделать это сама потом принести это для других, чтобы исправить это для вас, вы узнаете больше, чем
     
  7. SkaterSPB

    SkaterSPB Создатель

    Регистр.:
    5 окт 2011
    Сообщения:
    21
    Симпатии:
    1
    Итак алгоритм
    1. Счиываешь число.
    2. функцией itoa(); переводишь его в массив
    3. На выход отправляешь strlen(); где аргумент - массив в который перевел число
     
  8. mibdeveloper

    mibdeveloper Писатель

    Регистр.:
    18 окт 2015
    Сообщения:
    5
    Симпатии:
    0
    Это какая задача? Зачем там еще массив. Там все через switch. Значит в тупую берем число и проверяем.
     
  9. mibdeveloper

    mibdeveloper Писатель

    Регистр.:
    18 окт 2015
    Сообщения:
    5
    Симпатии:
    0
    И думаю, что массивы они еще не учили )))
     
  10. SkaterSPB

    SkaterSPB Создатель

    Регистр.:
    5 окт 2011
    Сообщения:
    21
    Симпатии:
    1
    Блин, не увидел что нужно на свичах
    Вот эта задача
    Код:
       int a = 123;
        char buf[20];
        itoa(a, buf, 10);
        cout << "strlen = "<< strlen(buf) << endl;
    проверил, работает