第1个回答 2009-03-17
#include"stdio.h"
#include"stdlib.h"
#include"ctype.h"
#include"string.h"
#define ERROR -999999999
int
cal(int fri,int sec,char som)
{
if(som=='+')
return (fri +sec );
else if(som=='-')
return (fri - sec);
else
return ERROR;
}
int explain(char *str,int &num1,int &num2,char &som)
{
char *str1,*pstr1;
char *str2,*pstr2;
str1=(char*)malloc(20);
str2=(char*)malloc(20);
pstr1=str1;
pstr2=str2;
while(isdigit(*str))
{
*pstr1=*str;
str++;
pstr1++;
}
*pstr1='\0';
num1=(int)strtol(str1,NULL,10);
while((*str!='+')&&(*str!='-'))
str++;
if(isdigit(*str))
return ERROR;
else
som=*str;
str++;
while(isdigit(*str))
{
*pstr2=*str;
str++;
pstr2++;
}
*pstr2='\0';
num2=(int)strtol(str2,NULL,10);
free(str1);
free(str2);
}
int
main(void)
{
int i;
int num,num1,num2;
char *string;
char somble;
string=(char*)malloc(100);
printf("enter the num:\n");
scanf("%d",&num);
fflush(stdin);
for(i=0;i<num;i++)
{
fgets(string,100,stdin);
explain(string,num1,num2,somble);
printf("%d\n",cal(num1,num2,somble));
}
return 0;
}
第2个回答 2009-03-17
用字符串存储数据 并且初始化数组全部为'\0' 比如你把213914存储到数组a[10]里面 那么结果就是 a="000213914\0" 同理 b="023466123\0" 然后对应位相加 加完后逢十进一 进完后再保留个位数就好了 就和你小时候列竖式算加法一个道理 减法一个道理 但要注意进位
第3个回答 2019-08-23
等十分钟
在给你写
加法函数
好久没写程序了
本来以为十分钟能写好
。。。。。(修改:修复了个小bug)
void
plus(char
*a,
char
*b,
char
*c){
int
i,index_a,index_b,index_c,carry=0,ten='9'+1,temp_index_c;
index_a=strlen(a)-1;
//
index变量指向最末一个数字
index_b=strlen(b)-1;
index_c=index_a>index_b?
index_a:index_b;
temp_index_c=index_c;
if(index_a>=index_b){
for(i=index_b+1;i>=0;i--){
b[i+(index_a-index_b)]=b[i];
}
for(i=0;i<index_a-index_b;i++)
b[i]='0';
}
else{
for(i=index_a+1;i>=0;i--){
a[i+(index_b-index_a)]=a[i];
}
for(i=0;i<index_b-index_a;i++)
a[i]='0';
}
while(index_c>=0){
c[index_c]=a[index_c]+b[index_c]+carry-'0';
if(c[index_c]>=ten){
c[index_c]-=ten-'0';
carry=1;
}
else
carry=0;
index_c--;
}
if(carry==1){
for(i=temp_index_c;i>0;i--){
c[i+1]=c[i];
}
c[0]=1;
}
c[temp_index_c+1]=0;
}
第4个回答 2009-03-17
汗....这个已经很简单了,用字符数组存储数据进行处理.再用switch算加减法
第5个回答 2009-03-17
#include"stdio.h"
#include"stdlib.h"
#include"ctype.h"
#include"string.h"
#define ERROR -999999999
int
cal(int fri,int sec,char som)
{
if(som=='+')
return (fri +sec );
else if(som=='-')
return (fri - sec);
else
return ERROR;
}
int explain(char *str,int &num1,int &num2,char &som)
{
char *str1,*pstr1;
char *str2,*pstr2;
str1=(char*)malloc(20);
str2=(char*)malloc(20);
pstr1=str1;
pstr2=str2;
while(isdigit(*str))
{
*pstr1=*str;
str++;
pstr1++;
}
*pstr1='\0';
num1=(int)strtol(str1,NULL,10);
while((*str!='+')&&(*str!='-'))
str++;
if(isdigit(*str))
return ERROR;
else
som=*str;
str++;
while(isdigit(*str))
{
*pstr2=*str;
str++;
pstr2++;
}
*pstr2='\0';
num2=(int)strtol(str2,NULL,10);
free(str1);
free(str2);
}
int
main(void)
{
int i;
int num,num1,num2;
char *string;
char somble;
string=(char*)malloc(100);
printf("enter the num:\n");
scanf("%d",&num);
fflush(stdin);
for(i=0;i<num;i++)
{
fgets(string,100,stdin);
explain(string,num1,num2,somble);
printf("%d\n",cal(num1,num2,somble));
}
return 0;
}
第6个回答 2009-03-17
用字符串存储数据 并且初始化数组全部为'\0' 比如你把213914存储到数组a[10]里面 那么结果就是 a="000213914\0" 同理 b="023466123\0" 然后对应位相加 加完后逢十进一 进完后再保留个位数就好了 就和你小时候列竖式算加法一个道理 减法一个道理 但要注意进位
第7个回答 2019-08-23
等十分钟
在给你写
加法函数
好久没写程序了
本来以为十分钟能写好
。。。。。(修改:修复了个小bug)
void
plus(char
*a,
char
*b,
char
*c){
int
i,index_a,index_b,index_c,carry=0,ten='9'+1,temp_index_c;
index_a=strlen(a)-1;
//
index变量指向最末一个数字
index_b=strlen(b)-1;
index_c=index_a>index_b?
index_a:index_b;
temp_index_c=index_c;
if(index_a>=index_b){
for(i=index_b+1;i>=0;i--){
b[i+(index_a-index_b)]=b[i];
}
for(i=0;i<index_a-index_b;i++)
b[i]='0';
}
else{
for(i=index_a+1;i>=0;i--){
a[i+(index_b-index_a)]=a[i];
}
for(i=0;i<index_b-index_a;i++)
a[i]='0';
}
while(index_c>=0){
c[index_c]=a[index_c]+b[index_c]+carry-'0';
if(c[index_c]>=ten){
c[index_c]-=ten-'0';
carry=1;
}
else
carry=0;
index_c--;
}
if(carry==1){
for(i=temp_index_c;i>0;i--){
c[i+1]=c[i];
}
c[0]=1;
}
c[temp_index_c+1]=0;
}
第8个回答 2009-03-17
汗....这个已经很简单了,用字符数组存储数据进行处理.再用switch算加减法