c语言问题字符加减操作 C语言中的自加减问题
C\u8bed\u8a00 \u5b57\u7b26\u4e32\u52a0\u51cf\u95ee\u9898\uff0c\u8bf7\u4e2a\u4f4d\u8fdb\u6765\u770b\u770bvoid recon(char arr[], int *value);int main() {char arr[250];char ch = 0;int value = 0;int a = 0;int c = 0;int i = 0;gets(arr);recon(arr, &value);printf("%d\n", value);}void recon(char arr[], int *value) {char temp[250];char ch = 0;size_t at = 0,i=0;char c = 0;int s = 0;while (arr[i]!='\0'){at = 0;memset(temp, 0, sizeof(char)* 32);if (arr[i] == '+' || arr[i] == '-') {temp[at++] = arr[i++];}do {ch = arr[i];if (ch == '+' || ch == '-' || ch == 0) {break;}else {temp[at++] = ch; i++;}} while (1);s = atoi(temp);*value += s;}}
for\u5faa\u73af\u91cc\u7684y--\u662f\u8fd0\u884c\u5b8c\u6210for\u5faa\u73af\u5185\u5bb9\u4e4b\u540e\u8fdb\u884c\u81ea\u51cf1\u7684
\u8fd9\u6bb5\u4ee3\u7801\u91cc\u5c31\u662f\u5148\u662fy=10\u7136\u540e\u8fd0\u884cif\u8bed\u53e5\uff0c\u8fd0\u884cif\u540e\u81ea\u51cf1\uff0c
其他的我在调试中,稍等
---------------------------------------------------------------------------------------------------
第一种方法,按字符进行计算:
#define max 1000
/*1. 大整数加法计算两个整数m、n的和,0<=m,n<=10的50次方。
输入输出格式:本题只有1组输入数据,每组数据只有1行,
每组数据包含两个0到10的50次方之间的大整数,两个整数中间用1个空格分隔。
对于每组数据,输出一行,表示两个大整数的和。*/
void nz(char *s)//将字符串逆置
{
int l,temp;
l=strlen(s);
for(int i=0;i<l/2;i++)
{
temp=s[i];s[i]=s[l-i-1];s[l-i-1]=temp;
}
}
void main()
{
char m[max],n[max],*r,*s,h[max+1]={0};
long int a,b;
int i,j,k;
printf("输入两个很大的数!\n");
r=m;s=n;
printf("输入第一个大数!\n");
gets(r);fflush(stdin);
printf("输入第二个大数\n");
gets(s);fflush(stdin);
a=strlen(r);
b=strlen(s);
nz(r);
nz(s);
if(a>b)
{
for(j=b;j<a;j++)
s[j]='0';
/*for(j=0;j<b;j++)
printf("%c",s[j]);*/
for(i=0;i<a;i++)
{
h[i]=r[i]+s[i]-'0'; //字符'i'=i+'0',两个相加会多出一个'0'
if(h[i]>'9')//字符判断>=10的方法是>'9'
{
h[i]=h[i]-10;
h[i+1]=h[i+1]+1;
}
}
}
else if(a<b)
{
for(j=a;j<b;j++)
r[j]='0';
for(i=0;i<b;i++)
{
h[i]=r[i]+s[i]-'0';//字符'i'=i+'0',两个相加会多出一个'0'
if(h[i]>'9') //字符判断>=10的方法是>'9'
{
h[i]=h[i]-10;
h[i+1]=h[i+1]+1;
}
}
}
puts("\n");
for(k=((a>b)?a:b);k>=0;k--)
{
if(h[k]==0)continue;
else printf("%c",h[k]); //输出的是整数
}
}
我没有给你解答出来 但是我发现了你的程序一个小错误
自定义函数
void nz(char *s)//将字符串逆置
{
int l,temp;
l=strlen(s);
for(int i=0;i<l/2;i++)
{
temp=s[i];s[i]=s[l-i-1];s[l-i-1]=temp;
}
}
你忽略了改字符数组个数的奇偶问题了
我的如下稍有改动
void nz(char *s)//将字符串逆置
{
int l,i,j;
char temp,ch;
l=strlen(s);
if(l%2==1) //如果l是奇数的话
for(int i=0;i<l/2;i++)
{
{temp=s[i];s[i]=s[l-i-1];s[l-i-1]=temp;}
}
if(l%2==0)
for(i=0;i==j;i++)
{
j=l;
temp=s[i];
s[i]=s[j];
s[j]=temp;
j++;
}
}
希望对你有所帮助!
首先:你的这个程序,没有处理a==b的情况,这一个需要加上;其次、你的输出有问题,你的数组h[max+1]是字符型的,你却用整形输出,这显然是不对的。还有,判断里面的循环有问题:
h[i]=s[i]+r[i],应该改写为:h[i]=s[i]+r[i]-'0';还有、满十进一那最好写成加一个常数c=1;还有最后一点:最后的输出应该写成,printf("%c",h[k-1]);把我说的这些改了就ok了。我已经改好了,祝你成功!
绛旓細C璇█涓紝瀛楃鐩稿姞鍑忓疄闄呮槸ASCII鐮佺浉鍔犲噺 a=97,b=98,c=99锛岃繖鏄笁涓瓧绗︾殑ASCII鐮侊紝鍗冲疄闄呮槸97+98+99=294 鐢变簬i涔熸槸瀛楃锛294瀛樺埌i涓篃鐩稿綋浜嶢SCII鐮侊紝浣咥SCII鐮佹渶澶т负256 294-256=38锛屾墍浠鐨凙SCII鐮佷负38锛屽搴斿瓧绗︹&鈥檖rintf("%c", i); 杈撳嚭& printf("%d", i); 杈撳嚭38 锛堝鏋渋...
绛旓細璁$畻鏈烘墽琛岀殑鎿嶄綔鏄皢c2鐨凙SCII鐮佸煎噺鍘籧1鐨凙SCII鐮佸硷紝鍗66锛'B'鐨凙SCII鐮佸硷級鍑忓幓65锛'A'鐨凙SCII鐮佸硷級锛屽緱鍒扮粨鏋1銆傝繖涓粨鏋滀篃浼氳浆鎹负涓涓瀛楃锛屽瓨鍌ㄥ湪c4涓傚湪杩欑鎯呭喌涓嬶紝1瀵瑰簲鐨凙SCII瀛楃鏄疭OH锛圫tart of Header锛夛紝鍚屾牱鏄竴涓潪鎵撳嵃瀛楃銆傜患涓婃墍杩帮紝C璇█鐨勫瓧绗﹀瀷鍙互杩涜鏁板艰繍绠楁槸鍥犱负瀛...
绛旓細else printf("%c",h[k]); //杈撳嚭鐨勬槸鏁存暟 } }
绛旓細c璇█涓暣褰㈠拰瀛楃鍨嬪彉閲忔槸閫氱敤鐨勶紝鍗冲瓧绗﹀瀷鍙橀噺鏄敤ASCII鐮佽〃绀虹殑锛屾槸鏁村舰鐨勶紝鍙互鐩存帴鍋氬姞鍑忎箻闄よ繍绠楋紝鍙槸鏈鍚庤緭鍑鸿鐢ㄥ瓧绗﹀瀷杈撳嚭锛屽锛歝har a;a=98;a++;printf("%c",a);
绛旓細閫堿鍚э紝棣栧厛x-'a'杞负鏁板瓧涓5,5+1=6锛'A'+6=G,int鍨嬩笌瀛楃鍨嬬浉鍔狅紝浼氭妸int鍨嬭嚜鍔ㄨ浆涓哄瓧绗﹀瀷銆
绛旓細+)銆佸噺(-)銆佷箻(*)銆侀櫎(/)绛夊洓鍒欒繍绠楃鍙凤紝绗︿覆鐨勫洓鍒欒繍绠椼傜粰鍑轰竴涓瀛楃涓锛屽寘鍚0~9鐨勬暟瀛楀拰+-*/()鐨勮繍绠楃锛-浠呬唬琛ㄥ噺鍙蜂笉浠h〃璐熸暟銆備妇渚嬪涓嬶細杈撳叆锛1+2*(3-4)锛岃緭鍑猴細-1銆傛濊矾锛氬垎鏋愬瓧绗︿覆鐨勫悎娉曟э紝 妯℃嫙鍥涘垯杩愮畻瑙勫垯锛屾寜鐓у厛鎷彿鍚庝箻闄ゆ渶鍚鍔犲噺鐨勯『搴忚绠(閫嗘尝鍏板紡)銆
绛旓細void recon(char arr[], int *value);int main() {char arr[250];char ch = 0;int value = 0;int a = 0;int c = 0;int i = 0;gets(arr);recon(arr, &value);printf("%d\n", value);}void recon(char arr[], int *value) {char temp[250];char ch = 0;size_t at =...
绛旓細鈥/鈥濃*鈥濇槸鍚屼竴绾х殑鎵浠ユ寜椤哄簭璁$畻锛屽厛鏄2/6锛屽張鐢变簬涓よ呭潎鏄暣鍨嬪垯璁$畻缁撴灉鍙栨暣鍨嬮儴鍒0 瀛楃绫诲瀷鐨7鍜0琚己鍒惰浆鎹㈡垚鏁村瀷7鍜0 .鏈缁堢粨鏋滄槸7
绛旓細瀛楃 鍔犲噺 鏄 瀵瑰簲鐨刟ssii鐮 鐨勫姞鍑 b='2'瀵瑰簲鐨刟ssii鐮 鏄50 printf("%c,",b++); 灏辨樉绀篴ssii鐮 涓51瀵瑰簲鐨勫 鍗 2 鍚屾牱 printf("%d\n",b-a); 鏄剧ず assii鐮佷负 1 瀵瑰簲鐨勫
绛旓細濡傛灉鏄疛S閾佸畾鏄疦AN锛C璇█浣犱负鍟ヤ笉鍦ㄧ數鑴戜笂璇曚笅銆傜粨鏋滃鍥