程序是将 用户输入的整数 分拆成 个位 十位 百位 然后按相应的大写输出 错误很多 跪求高手 指正
[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:
}
程序是将 用户输入的整数 分拆成 个位 十位 百位 然后按相应的大写输出
错误很多 跪求高手 指正
[解决办法]
中午没有午休写出来的哦,求给分
#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;}
[解决办法]
#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");