Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 12 kết quả

Đề tài: Bàn về code đổi chuổi số thành chữ (đọc số)

  1. #1
    Ngày gia nhập
    03 2009
    Bài viết
    9

    Talking Bàn về code đổi chuổi số thành chữ (đọc số)

    Các pác pro ôi! Mình mới học C, thầy cho đề bài là đọc chuổi số thành chữ.
    VD: '123' đọc là một trăm hai mươi ba.

    Có các pac pro post một số bài nhưng chưa hoàn chỉnh được.

    VD: '10' đọc là mười không.....

    Có pác pro nào giúp cho em coade hoàn thiện không.

    THành thật biết ơn!!!!

  2. #2
    Ngày gia nhập
    03 2009
    Bài viết
    9

    mình có cái này nhưng chạy chưa chuẩn các '10', '100' ....
    Code:
    #include <string.h>
    #include <stdio.h>
    #include <conio.h>
    //Ham doi chu thanh so
    /*void doichu(int i, int l, char st[10])
    {
       switch(st[i])
       {
         case '0': if ((l-1-i)%3!=1)
    		printf("Khong\t");
    		break;
         case '1': if((l-1-i)%3!=1)
    		printf("Mot\t");
    		break;
         case '2': printf("Hai\t"); break;
         case '3': printf("Ba\t"); break;
         case '4': printf("Bon\t"); break;
         case '5': printf("Nam\t"); break;
         case '6': printf("Sau\t"); break;
         case '7': printf("Bay\t"); break;
         case '8': printf("Tam\t"); break;
         case '9': printf("Chin\t"); break;
       }
    }
    // Ham don vi
    void donvi(int i, int l, char st[20])
    {
    switch((l-1-i)%3)
       {
         case 0: switch((l-i)/3)
    	 {
    	 case 1: printf("ngan\t");break;
    	 case 2: printf("trieu\t");break;
    	 case 3: printf("ty\t");break;
    	 }; break;
         case 1: if (st[i]=='0')
    		    printf("Le\t");
    	     if(st[i]!='0')
    		   printf("muoi\t");
    	     break;
         case 2: printf("tram\t"); break;
       };
    }
    //////////////////////////////////////////
    void main()
    {
    	int i,j,l;
    	char so[15];
    	clrscr();
    	printf("Nhap chuoi so: ");
    	gets(so);
    	l=strlen(so);
    	for(i=0;i<l;i++)
    	  { doichu(i,l,so);
    	    donvi(i,l,so);
    	  }
    	getch();
    }

  3. #3
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Các pác pro ôi! Mình mới học C, thầy cho đề bài là đọc chuổi số thành chữ.
    Cái này trên diễn đàn không thiếu, bạn chịu khó search đê. Có đến hàng chục code và bài viết về vấn đề này rồi.

  4. #4
    Ngày gia nhập
    03 2009
    Bài viết
    9

    kekeke a!
    Các bài viết minh đã xem hết rùi, có tất cả 3 code nhưng code nào cũng có nhược điểm là đọc không đạt yêu cầu.
    VD: '100' thì đọc là "một trăm lẽ không"
    '10' thì đọc là mười không !!!!!!!!!!!!!

    Pác giúp em đi.

  5. #5
    Ngày gia nhập
    04 2007
    Bài viết
    134

    Thì thêm 1,2 cái if nữa thôi. Ví dụ

    Code:
    if (number == 10)
       printf ("Muoi");

  6. #6
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Mặc định Bàn về code đổi chuổi số thành chữ (đọc số)

    Vậy thì xem code mình làm đi
    Code:
    //mot, hai, ba, bon, nam, sau, bay, tam, chin, muoi <=> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
    //muoi`, tram                          ngan, trieu, ty
    //linh, muoi
    //lam
    //*Han che so chu so trong kieu int
    //Khoang 10 chu so la ok
    #include <stdio.h>
    #include <stdlib.h>
    
    void num1(int x);
    void num2(int x);
    void num3(int x);
    void speaknum(int x);
    
    int main()
    {
        int n;
        printf("- Voi trinh bien dich IDE thi int 4 byte nen nhap n<=4 294 967 295\n- Voi trinh bien dich tren DOS n<=32767");
        printf("\n * Nhap so can doc: ");scanf("%d",&n);
        speaknum(n);
    }
    
    void num1(int x)
    {
        char ch[11][6]={"khong","mot","hai","ba","bon","nam","sau","bay","tam","chin"};
        printf("%s ",ch[x]);
    }
    
    void num2(int x)
    {
        int a,b;
        a=x/10;
        b=x%10;
        if (b==0)
        {
            if (a==1) printf("muoi` ");
            else {num1(a);printf("muoi ");}
        }
        else
        {
            if (a==1) {printf("muoi` ");num1(b);}
            else {num1(a);printf("muoi ");num1(b);}
        }
    }
    
    void num3(int x)
    {
        int a,b,c;
        c=x%10;
        x=x/10;
        b=x%10;
        a=x/10;
        if (b==0)
        {
            if (c==0)
            {
                num1(a);printf("tram ");
            }
            else
            {
                num1(a);printf("tram linh ");num1(c);
            }
        }
        else if (c==0 && b!=0)
        {
            if (b==1) {num1(a);printf("tram muoi` ");}
            else if (b==5) {num1(a);printf("tram lam muoi ");}
            else {num1(a);printf("tram ");num1(b);printf("muoi ");}
        }
        else
        {
         if (b==1) {num1(a);printf("tram muoi` ");num1(c);}
         else if (b==5) {num1(a);printf("tram lam muoi ");num1(c);}
         else {num1(a);printf("tram ");num1(b);printf("muoi ");num1(c);}
        }
    }
    
    void speaknum(int x)
    {
          if (x==0) {printf("khong ");exit(1);}
          char ch [4][6]={"nghin","trieu","ti"};
          int a[5],i=0;
          while (x%1000!=x)
          {
              a[i]=x%1000;
              x=x/1000;
              i++;
          }
          a[i]=x;
          if (a[i]>99)num3(a[i]);
          else if (a[i]>9) num2(a[i]);
          else num1(a[i]);
          if (i>0) printf("%s ",ch[i-1]);
          while (i>0)
          {
              i--;
              if (a[i]!=0) {num3(a[i]);if (i>0) printf("%s ",ch[i-1]);}
          }
    }
    Đã được chỉnh sửa lần cuối bởi QuangHoang : 04-03-2009 lúc 06:42 PM.

  7. #7
    Ngày gia nhập
    03 2009
    Nơi ở
    Hà Nội
    Bài viết
    74

    mình đóng góp thêm bài của mình,các bạn xem rồi cho ý kiến nhé:
    Code:
    #include <stdio.h>
    
    void dich(int so);
    int mu(int n);
    int kt(int n,int m);
    
    char* chso[11]={"khong","mot","hai","ba","bon","nam","sau","bay","tam","chin"};
    int bac[10]={1,1,1,3};
    char* chu[10]={"","muoi","tram","nghin"};
    
    int main(){
     dich(12356);
    }
    void dich(int so){
        int i,tg;
        int gt[10];
    	tg=so;
        for(i=0;tg>0;i++){
            gt[i]=tg%mu(bac[i]);
            tg/=mu(bac[i]);
        }
        //printf("%d %d",gt[i-1],i);
        --i;
        for(;i>=0;i--){
            if(gt[i]>9){
              dich(gt[i]);
            } else
            if(kt((gt[i]),bac[i])) printf("%s ",chso[gt[i]]);
            printf("%s ",chu[i]);
        }
    }
    int mu(int n){
        int i,tg=1;
        for(i=1;i<=n;i++) tg*=10;
        return tg;
    }
    int kt(int so,int bac){
        if((so==0)&&(bac==0)) return 0;
        if((so==1)&&(bac==1)) return 0;
        if((so==0)&&(bac==1)) return 0;
        return 1;
    }

  8. #8
    Ngày gia nhập
    03 2009
    Bài viết
    9

    Bài này bảo đảm Ok, từ 500 bài tập C trên diễn đàn
    Nhập một số nguyên n (n<2 tỷ) đổi số vừa nhập sang chữ .
    Ví dụ: n=1958274869 xuất kết quả: Mot ty chin tram nam muoi tam trieu hai tram bay muoi bon ngan tam tram sau muoi chin
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4. char s[50] = "";
    5.  
    6. char *bachuso(unsigned int n)
    7. {
    8.   char kyso[10][5]= {"", "mot", "hai", "ba", "bon", "nam", "sau",
    9.                     "bay", "tam", "chin"};
    10.   int donvi, chuc, tram;
    11.  
    12.   s[0] = 0;
    13.   donvi = n % 10;
    14.   n /= 10;
    15.   chuc = n % 10;
    16.   tram = n / 10;
    17.   if (tram > 0)
    18.   {
    19.     strcat(s, kyso[tram]);
    20.     strcat(s, " tram ");
    21.   }
    22.   if (chuc > 0)
    23.   {
    24.     if (chuc== 1)
    25.        strcat(s, "muoi ");
    26.     else
    27.     {
    28.        strcat(s, kyso[chuc]);
    29.        strcat(s, " muoi ");
    30.     }
    31.   }
    32.   if (donvi > 0)
    33.   {
    34.      if (chuc == 0 && tram != 0)
    35.        strcat(s, "le ");
    36.      if (donvi == 1)
    37.        strcat(s, "mot");
    38.      else if (donvi == 5 && (chuc != 0 || tram != 0))
    39.        strcat(s, "lam");
    40.      else if (donvi == 5 && (chuc = 0 || tram != 0))
    41.        strcat(s, "nam");
    42.      else
    43.        strcat(s, kyso[donvi]);
    44.   }
    45.   return s;
    46. }
    47.  
    48. void main()
    49. {
    50.   unsigned long n;
    51.   unsigned ngan, trieu, ty, donvi;
    52.   char chuoi[200];
    53.  
    54.   printf("\nNhap mot so: ");
    55.   scanf("%ld", &n);
    56.   printf("So %ld doc bang chu la :\n", n);
    57.   if (n == 0)
    58.     printf("khong");
    59.   else
    60.   {
    61.      donvi = n % 1000;
    62.      n /= 1000;
    63.      ngan = n % 1000;
    64.      n /= 1000;
    65.      trieu = n % 1000;
    66.      ty = n / 1000;
    67.      chuoi[0] = 0;
    68.      if (ty > 0)
    69.        printf("%s ty ", bachuso(ty));
    70.      if (trieu > 0)
    71.        printf("%s trieu ", bachuso(trieu));
    72.      if (ngan > 0)
    73.        printf("%s ngan ", bachuso(ngan));
    74.      if (donvi > 0)
    75.        printf("%s", bachuso(donvi));
    76.   }
    77.  
    78.   getch();
    79. }
    Đã được chỉnh sửa lần cuối bởi QuangHoang : 17-03-2009 lúc 08:25 PM.

  9. #9
    Ngày gia nhập
    05 2009
    Bài viết
    0

    cám ơn bạn bethaophuong2004 nhiều nha

  10. #10
    Ngày gia nhập
    12 2009
    Nơi ở
    Tp. Hồ Chí Minh
    Bài viết
    64

    Smile Đọc số lên đến hơn 2 tỉ

    Các bạn tham khảo xem sao nha!
    PHP Code:
    #include "stdio.h"
    #include "conio.h"
    #include "string.h"
    #include "math.h"
    #define minlong -2147483648 
    #define maxlong  2147483647
    char docso[][10]={"khong ","mot ","hai ","ba ","bon ","nam ","sau ","bay ","tam ","chin "};
    char donvi[][10]={" ","muoi ","tram ","nghin ","muoi ","tram ","trieu ","muoi ","tram ","ti "};

    void main()
    {    
    long n,m
        
    int a[10];    
        
    char c;
      do
      {
        
    printf("\nNhap N (%ld<=N<=%ld): N= ",minlong,maxlong);    //if ban nhap gia tri vuot qua pham vi cua kieu 'long' 
        
    scanf("%ld",&n);                                    //thi may se lay gtri ngau nhien thuoc kieu 'long'
        
    m=n;
        
    char s[150]="";
        if(
    n<0strcat(s,"Am ");                                //if n<0 => doc so am
        
    int i=0;
        do
        {    
    a[i++]=abs(m%10);
            
    m/=10;
        } while(
    m!=0);

        for(
    int j=i-1;j>=0;j--) 
            {    if(
    a[j]==&& strcmp(donvi[j],"muoi ")==0)    
                           {    
    strcat(s," muoi` ");        //if chu so hang chuc =1 thi chi doc la 'muoi`'.
                    
    continue;                    //Vd: 12000,115,1015,1117
                
    }
            
                if((
    a[j]==&& a[j-1]==&& a[0]==0) || (j==&& a[j]==&& i!=1)) continue;//Vd: 1000 chi doc la 'mot nghin'
                
                
    if(a[j]==&& (strcmp(donvi[j],"nghin ")==|| strcmp(donvi[j],"trieu ")==0)) 
                {    
    strcat(s,donvi[j]);
                        continue;                            
    //if chu so hang nghin,trieu=0 thi chi doc 'nghin' hoac 'trieu' thoi 
                
    }                                    // ma khong doc them so 'khong ' vao        

                
    if(strcmp(donvi[j],"muoi ")==&& a[j]==&& a[j-1]!=0)        
                                            {    
    strcat(s,"linh ");
                                                continue;        
    //Neu chu so hang chu =0 thi doc la 'linh '
                                            
    }
            
                if(
    a[j]==&& strcmp(donvi[j],"muoi ")==0) continue;        //if j la hang chuc(trieu,nghin)+a[j]=0 thi bo qua 

                
    if(strcmp(donvi[j+1],"muoi ")==&& a[j]==&& a[j+1]!=&& i!=j+1)    
                                    {    
    strcat(s,"lam ");
                                            
    strcat(s,donvi[j]);        //doc 'lam ' doi voi so 5.VD: 35
                                        
    continue;
                                    }
                
                
    strcat(s,docso[a[j]]);        //s=s+docso[a[j]]
                
    strcat(s,donvi[j]);        //s=s+donvi[j]
                
            
    }
        
    printf("\nSo %ld doc la: %s \n",n,s);
        
    printf("\nPress ESC=>Exit \t\t Keypress=>Continue ");
        
    c=getch();
      } while(
    c!=27);        //27 la ma cua ESC

    Hơi khó hiểu ??????
    Đã được chỉnh sửa lần cuối bởi thiendiep_it : 09-01-2010 lúc 03:21 PM.
    Hãy quyết định và đấu tranh
    Để hạnh phúc và hi vọng!
    --------Thiên Điệp --> http://khmt.lifeme.net

Các đề tài tương tự

  1. code tìm chuỗi con trong chuỗi lớn bị lỗi khó hiểu..mọi người giúp mình vơi
    Gửi bởi giophieulang trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 30-05-2012, 10:35 AM
  2. Code cắt chuỗi bằng lập trình C#, ai cần thì lấy
    Gửi bởi convitcon trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 8
    Bài viết cuối: 03-12-2010, 04:43 PM
  3. Cắt đầu và cắt cuối 1 chuỗi - Bạn nào sửa hộ mình code với
    Gửi bởi lex_luthor_vn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 17
    Bài viết cuối: 02-09-2009, 12:53 PM
  4. cho hỏi cái code về chuỗi này sai ở đâu
    Gửi bởi thanhlinhhue trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 17-12-2008, 12:28 PM
  5. Code xử lý chèn, và nối chuỗi trong C++. Hàm chèn chuỗi không chạy được?
    Gửi bởi luckyluke trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 10
    Bài viết cuối: 01-03-2008, 04:56 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn