首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

程序是将 用户输入的整数 分拆成 个位 十位 百位 然后按相应的大写输出 异常很多 跪求高手 指正

2012-05-14 
程序是将 用户输入的整数 分拆成 个位 十位 百位 然后按相应的大写输出错误很多 跪求高手 指正[codeC/C++

程序是将 用户输入的整数 分拆成 个位 十位 百位 然后按相应的大写输出 错误很多 跪求高手 指正
[code=C/C++][/code]
#include<stdio.h>
char shuchu2(int a,char *p );
void shuchu(int i ,int *a );
void fenchai (int i,char *p);
int main(void)
{
int i;
char p[20];
printf ("请输入0--32677之间的数\n");
scanf("%d",&i);
fenchai (i,p);
putchar (p);

return 0;
}


void fenchai (int i,char *p)
{
int j;
int x, a[10];
if (i>=0&&i<=10)
{
shuchu2(i,p+0);
return;
}
while (i)
{
i /10 >=0 && i/10<=9, j = 2;
i /10 >=0 && i/100<=9, j = 3;
i /100 >=0 && i/1000<=9, j = 4;
i /10000 >=0 && i/10000<=9, j = 5;

}
while (j)
{
j = 5,x = 10000;
j = 4,x = 1000;
j = 3,x = 100;
j = 2,x = 10 ;

}
 
if (j<1)
{
a[0] = i /x;
j--;
}
else if (j<1)
{
a[1] = (i-(a[0]*x))/(x/10);
j--;
}
else if (j<1)
{
a[2] = (i-(a[0] * x + a[1]*(x/10)))/(x/10/10);
j--;
}
else if (j<1)
{
a[3] = (i-(a[0] * x + a[1] * (x / 10) + a[2] * (x /10/10)))/ (x/10/10/10);
j--;
}
else 
{
a[4] = (i-(a[0] * x + a[1] * (x / 10) + a[2]*(x / 10 /10) + a[3]*(x/10/10/10)))/(x/10/10/10/10);
}
return ;

}
void shuchu(int i ,int *a,char *p )
{
int j=0,x;
  while (i)
{
i = 5,x = 10000;
i = 4,x = 1000;
i = 3,x = 100;
i = 2,x = 10;

}
while (j == i+1)
{
shuchu2(*(a+j),p+i);
*(a+j) *= x;
shuchu2(*(a+j),p+i+1);
j++;
p++;
}
return;
}
char shuchu2(int a,char *p )
{
switch(a)
case 0:*(p)="零";break;
case 1:*(p)="壹" ;break;
case 2:*(p)="贰" ;break;
case 3:*(p)="叁" ;break;
case 4:*(p)="肆" ;break;
case 5:*(p)="伍" ;break;
case 6:*(p)="陆" ;break;
case 7:*(p)="柒" ;break;
case 8:*(p)="捌" ;break;
case 9:*(p)="玖" ;break;
case a>99&&<999:*(p)="百" ;break;
case a>999&&<9999:*(p)="千" ;break;
case a>9999:*(p)="万" ;break;
default: 

}
程序是将 用户输入的整数 分拆成 个位 十位 百位 然后按相应的大写输出 
错误很多 跪求高手 指正

[解决办法]
中午没有午休写出来的哦,求给分

C/C++ code
#include <stdio.h>void transfer(int num){    char* unit[4]={"十","百","千","万"};    char* bit[10]={"零","壹","贰","参","肆","伍","陆","柒","捌","玖"};    int i=0;    int a[5]={0};    while(num>0)    {        a[i++]=num%10;//将第一位分别存到数组中        num/=10;    }    i--;//i最后多+了一次,调整一下后直接 用于下面的for循环    for(;i>0;i--)    {            if(a[i]!=0) printf("%s%s",bit[a[i]],unit[i-1]);        else if(a[i-1]!=0) printf("零");/*考虑中间出现 零 的情况,注意如果 出现中间出现零        那么接下来需要一个不为零的数才输出 0否则像10000,零一直到最后一位,就直接输出 "一万",不需要零*/    }    if(a[i]>0) printf("%s\n",bit[a[i]]);//个位 最后 输出 ,如果个位是零,则不输出 }int main(void){    printf("请输入一个整数(0-99999): ");    int num;    scanf("%d",&num);    transfer(num);        return 0;}
[解决办法]
C/C++ code
#include <afx.h>#include <stdio.h>CString ChineseCapitalMoney(double Num) {    CString szChMoney,szNum;    int iLen, iNum, iAddZero=0;    TCHAR* hzUnit[18]={_T("分"),_T("角"),_T("元"),_T("拾"),_T("佰"),_T("仟"),_T("万"),_T("拾"),_T("佰"),_T("仟"),_T("亿"),_T("拾"),_T("佰"),_T("仟"),_T("万"),_T("拾"),_T("佰"),_T("仟")};    TCHAR* hzNum[10]={_T("零"),_T("壹"),_T("贰"),_T("叁"),_T("肆"),_T("伍"),_T("陆"),_T("柒"),_T("捌"),_T("玖")};    if (-0.01<Num && Num<0.01) return _T("零元整");    szNum.Format(_T("%18.0f"), Num*100); // 最小到分    szNum.TrimLeft();    iLen=szNum.GetLength();    if(iLen>15 || iLen==0 || Num<0) return _T(""); // 数据错误返回    for(int i=0;i<iLen;i++) {        iNum=_ttoi((LPCTSTR)szNum.Mid(i,1));        if (iNum==0) {            iAddZero++;        } else {            if (iAddZero>0) szChMoney+=_T("零");            szChMoney+=hzNum[iNum];            iAddZero=0;        }        if (iNum!=0 || iLen-i==3 || iLen-i==11 || ((iLen-i+1)%8==0 && iAddZero<4)) szChMoney+=hzUnit[iLen-i-1];    }    if (szNum.Right(2)==_T("00")) szChMoney+=_T("整"); // 没有角和分    return szChMoney;}void main() {    double d;    CString s;    d=-1.0            ;printf("%16.2f %s\n",d,ChineseCapitalMoney(d));    d=0.0             ;printf("%16.2f %s\n",d,ChineseCapitalMoney(d));    d=1234501234567.89;printf("%16.2f %s\n",d,ChineseCapitalMoney(d));    d=1000000000000.01;printf("%16.2f %s\n",d,ChineseCapitalMoney(d));    d=1000000000001.00;printf("%16.2f %s\n",d,ChineseCapitalMoney(d));    d= 130040600090.01;printf("%16.2f %s\n",d,ChineseCapitalMoney(d));}//           -1.00//            0.00 零元整//1234501234567.89 壹万贰仟叁佰肆拾伍亿零壹佰贰拾叁万肆仟伍佰陆拾柒元捌角玖分//1000000000000.01 壹万亿元零壹分//1000000000001.00 壹万亿零壹元整// 130040600090.01 壹仟叁佰亿零肆仟零陆拾万零玖拾元零壹分 


[解决办法]
char* number[] = {"零", "壹", "贰","叁","肆","伍","陆","柒","捌","玖"};
char* unit[] = {" ", "十", "百", "千", "万"};
char a[10];
int num, i, j, len, flag = 0, end = 1;
memset(a, 0, sizeof(a));

printf("请输入1~65236之间的数:");
scanf("%d", &num);
sprintf(a, "%d", num);
len = strlen(a);
for(i = 0; i < len; i++) {
if (a[i] == '0' && flag == 0) {
for (j = i + 1; j < len; j++) {
if (a[j] != '0') {
end = 0;
break;
}
}
if (!end) {
printf("%s", number[0]);
}
flag = 1;
end = 1;
continue;
} else if (a[i] != '0') {
flag = 0;
printf("%s%s", number[a[i] - '0'], unit[len - i - 1]);
}
}
printf("\n");

热点排行