导航:首页 > 网络数据 > c语言大数据四则运算

c语言大数据四则运算

发布时间:2023-04-10 03:59:57

A. 用c语言编写大整数的四则运算,求大神

你可以找一下加密库的源文件来研究下,里面就有大数四则运算,曾经试着写2048位的大数四则运算,结果就写了加法,减法,宏早和简单的没有优化的乘法就没信心写了。。。大数是用数组表示的,没有用结构体,复制来的,不知能不能运行。。

#defineMAX400
voidmy_read(int*a)
{
intlen,i,flag=0;
chars[MAX];
aa:
while(1)
{
scanf("%s",&s);
len=strlen(s);
if(s[0]=='-')flag=1;
for(i=len-flag;i>=1;i--)
{
if((s[len-i]-'0')<0||(s[len-i]-'0')>9)
{
printf(" 你输入的第%d位不合法,按任意键重新输!!",len-i+1);
getch();
gotoaa;
}
else
a[i]=s[len-i]-'0';
}
if(flag)
a[0]=-(len-1);
else
a[0]=len;
break;
}
return;
}

voidmy_print(int*a)
{
inti;
if(a[0]<0)printf("-");
if(a[0]==0)
{
printf("0");
return;
}
for(i=abs(a[0]);i>=1;i--)
printf("%d",a[i]);
printf(" ");
}

voidformat(int*a)
{
intp;
for(p=1;p<a[0]||a[p]>=10;p++)
{
if(p>=a[0])a[p+1]=0;
a[p+1]+=a[p]/10;
a[p]=a[p]%10;
}
if(p>=a[0])a[0]=p;
return;
}
voidadd(int*a,int*b,int*c)
{
intlen,i;
if(a[0]<b[0])len=a[0];
elselen=b[0];
for(i=1;i<=len;i++)
c[i]=a[i]+b[i];
if(len<a[0])
{
for(;i<=a[0];i++)
c[i]=a[i];
c[0]=a[0];
}
else
{
for(;i<=b[0];i++)
{
c[i]=b[i];
}
c[0]=b[0];
}
format(c);
}

voidcommaltiply(int*a,intx,int*b)
{
inti;
for(i=1;i<=a[0];i++)
b[i]=a[i]*x;
b[0]=a[0];
format(b);
return;
}
voidmatiply(int*a,int*b,int*c)
{
inti,temp[MAX],j;
commaltiply(a,b[1],c);
for(i=2;i<=b[0];i++)
{
if(b[i]==0)
{
c[0]++;
for(j=c[0];j>1;j--)
侍庆c[1]=0;
老绝握}
else
{
commaltiply(a,b[i],temp);
for(j=1;j<i;j++)
commaltiply(temp,10,temp);
add(c,temp,c);
}
}
}
voiddectobin(int*a,int*b)
{
intp;
b[0]=0;
while(a[0]>0)
{
b[0]++;
b[b[0]]=a[1]%2;
p=a[0];
while(p>0)
{
if(a[p]%2&&p>1)a[p-1]+=10;
a[p]/=2;
if(a[a[0]]==0)a[0]--;
p--;
}
}
}

format1(int*a)
{
inti;
for(i=1;i<=a[0];i++)
if(a[i]<0)
{a[i]+=10;
a[i+1]-=1;
}
}

voidsub_1(int*a,int*b,int*c)
{
inti;
for(i=1;i<=b[0];i++)
c[i]=a[i]-b[i];
if(a[0]==b[0])gotoloop;
for(;i<=a[0];i++)
c[i]=a[i];
loop:
c[0]=a[0];
format1(c);
i=c[0];
while(1)
if(c[i]==0)i--;
elsebreak;
c[0]=i;
return;
}


voidsub(int*a,int*b,int*c)
{
inti,flag=0;
for(i=1;i<=a[0];i++)
if(a[i]!=b[i]){flag=1;break;}
if(flag==0)
{
c[0]=0;
return;
}
flag=0;
if(a[0]==b[0])
{
i=a[0];
while(i>0)
{
if(a[i]>b[i])
{
sub_1(a,b,c);
break;
}
if(a[i]<b[i])
{
flag=1;
sub_1(b,a,c);
break;
}
i--;
}
}
if(a[0]>b[0])
sub_1(a,b,c);
else
if(a[0]<b[0])
{
flag=1;
sub_1(b,a,c);
}
if(flag)
c[0]=-c[0];
else
c[0]=c[0];
}
voidmain()
{
inti,a[MAX],b[MAX],c[MAX];
charyn;
strat:
while(1)
{
clrscr();
printf(" ");
printf(" ************************************** ");
printf(" ** ");
printf(" *1.大整数的加法* ");
printf(" *2.大整数的减法* ");
printf(" *3.大整数的乘法* ");
printf(" *4.大整数进制转换* ");
printf(" *5.帮助?* ");
printf(" *6.退出* ");
printf(" ** ");
printf(" ************************************** ");
printf(" 请选择(1-6):");
yn=getch();
if(yn=='1'||yn=='2'||yn=='3'||yn=='4'||yn=='5'||yn=='6')break;
else
{
printf(" 输入不合法!按任意键重新输入!!!!");getch();
}
}
clrscr();
if(yn=='6')return;
if(yn=='4')
{
printf("请输入待转换的大整数:");
printf(" ");
my_read(a);
for(i=1;i<=abs(a[0]);i++)
b[i]=a[i];
b[0]=a[0];
if(a[0]<0){a[0]=-a[0];dectobin(a,c);a[0]=-a[0];c[0]=-c[0];gotoe;}
dectobin(a,c);
e:
printf("十进制:");
my_print(b);
printf("二进制:");
my_print(c);
gotoloop;
}
printf("请输入大整数A:");
my_read(a);
printf("请输入大整数B:");
my_read(b);
if(yn=='1')
{
if(a[0]<0&&b[0]<0){a[0]=-a[0];b[0]=-b[0];add(a,b,c);c[0]=-c[0];a[0]=-a[0];b[0]=-b[0];gotoc;}
if(a[0]>0&&b[0]<0){b[0]=-b[0];sub(a,b,c);b[0]=-b[0];gotoc;}
if(a[0]>0&&b[0]>0){add(a,b,c);gotoc;}
if(a[0]<0&&b[0]>0){a[0]=-a[0];sub(b,a,c);a[0]=-a[0];gotoc;}
c:
printf(" ");
printf("A=");
my_print(a);
printf(" ");
printf("B=");
my_print(b);
printf(" ");
printf("C=A+B=");
my_print(c);
gotoloop;
}
if(yn=='2')
{
if(a[0]<0&&b[0]<0){a[0]=-a[0];b[0]=-b[0];sub(b,a,c);a[0]=-a[0];b[0]=-b[0];}
if(a[0]<0&&b[0]>0){a[0]=-a[0];add(a,b,c);a[0]=-a[0];c[0]=-c[0];}
if(a[0]>0&&b[0]<0){b[0]=-b[0];add(a,b,c);b[0]=-b[0];}
if(a[0]>0&&b[0]>0)sub(a,b,c);
printf("A=");
my_print(a);
printf(" B=");
my_print(b);
printf(" C=A-B=");
my_print(c);
gotoloop;
}
if(yn=='3')
{
if(a[0]<0&&b[0]>0){a[0]=-a[0];matiply(a,b,c);a[0]=-a[0];c[0]=-c[0];gotod;}
if(a[0]>0&&b[0]<0){b[0]=-b[0];matiply(a,b,c);b[0]=-b[0];c[0]=-c[0];gotod;}
if(a[0]<0&&b[0]<0){a[0]=-a[0];b[0]=-b[0];matiply(a,b,c);a[0]=-a[0];b[0]=-b[0];gotod;}
matiply(a,b,c);
d:
printf(" A=");
my_print(a);
printf(" B=");
my_print(b);
printf(" C=A*B=");
my_print(c);
gotoloop;
}
loop:
while(1)
{
printf(" 继续计算吗?(y/n)");
yn=getch();
if(yn=='y')gotostrat;
if(yn=='n')return;
}
}

B. 求用C语言写的“大整数的四则运算”程序代码,请看详细描述,刷分勿近!

/////这个是C++的,C++下比较模块化一点用的是字符串存储整数,比数组存储容易实现点。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////1. 输入形式为:A[空格或换行]O[空格或换行]B;
//// 2. 1中A、B为大数,O为运算符(如输入:123456789 / 432432);
//// 3. 既然处理大数,就没必要输入小数点位了;
//// 4.加减不能处理负号,乘除可以;
//// 5. 用于学习交流,若发现错误或不妥之处可联系
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include<iostream>
#include<string>
using namespace std;
class BigFigure{
string num1,num2;
string outcome;
int precision;
char operation;
public:
BigFigure(){
num1=num2="0";
outcome="0";
precision=5;
}
string& plus(string &, string &);
string& subtration(string &, string &);
string& multiplication(string &, string &);
string& division(string &, string &);
void show();
void BigFigureInterface();
string &revese(string&);
friend istream& operator>>(istream& i, BigFigure& a){
return i>>a.num1>>a.operation>>a.num2;
}
~BigFigure(){ }
};
void BigFigure::show(){
cout<<"Result: "<<outcome<<endl;
}
void BigFigure::BigFigureInterface(){
BigFigure a;
cout<<"*********************************************************/n";
cout<<" Welcome... /n";
cout<<" Four Arithmetic Operations of Big Figures/n";
cout<<"*********************************************************/n/n";
cout<<"Notes:/n";
cout<<" 1. 输入形式为:A[空格或换行]O[空格或换行]B。/n";
cout<<" 2. 1中A、B为大数,O为运算符(如输入:123456789 / 432432)。/n";
cout<<" 3. 既然处理大数,就没必要输入小数点位了。/n";
cout<<" 4. 加减不能处理负号,乘除可以。/n";
cout<<" 5. 用于学习交流,若发现错误可联系519916178@qq.com。/n/n";
cout<<"Now Start, Input 0 0 0 to end if you want to quit!/n/n";
cout<<"[BigFigure #] ";
cin>>a;
while(a.operation!='0'){
switch(a.operation){
case '+': a.plus(a.num1, a.num2);
a.show(); break;
case '-': a.subtration(a.num1, a.num2);
a.show(); break;
case '*': a.multiplication(a.num1, a.num2);
a.show(); break;
case '/': a.division(a.num1, a.num2);
a.show(); break;
default:cout<<a.operation<<" is not Arithmetic Operation./n";
}
cout<<"[BigFigure #] ";
cin>>a;
}
system("cls");
cout<<"/n/n/n/n/n/n/t/t Quited.../n/n/n/n/n/n/n";
system("pause");
}

string& BigFigure::revese(string& s){
char c;
int t=s.size();
for(int i=0; i<t/2; i++){
c=s[i];
s[i]=s[t-i-1];
s[t-i-1]=c;
}
return s;
}
string& BigFigure::plus(string &str1, string &str2){//加法运算,未处理符号
int min=0,i,t=0;
string temp;
outcome.clear();
str1=revese(str1);
str2=revese(str2);
min=str1.size()<str2.size() ? str1.size() : str2.size();
for(i=0; i<min; i++){
temp+=(str1[i]+str2[i]-96+t)%10+48;
t=(str1[i]+str2[i]-96+t)/10;
}
if(min==str1.size()){
while(i<str2.size()){
temp+=(str2[i]+t-48)%10+48;
t=(str2[i]-48+t)/10;
i++;
}
if(t) temp+='1';
}
else{
while(i<str1.size()){
temp+=(str1[i]+t-48)%10+48;
t=(str1[i]-48+t)/10;
i++;
}
if(t) temp+='1';
}
outcome=revese(temp);
return outcome;
}

string &BigFigure::subtration(string &str1, string &str2){//减法运算,未处理符号
int min=0,flag,i,t=0;
string temp;
outcome.clear();
if(str1.size()>str2.size() || (str1.size()==str2.size() && str1.compare(str2)==1)){
str1=revese(str1);
str2=revese(str2);
flag=0;
min=str2.size();
}
else if(str1.size()==str2.size()){
if(!str1.compare(str2)){
outcome='0';
return outcome;
}
if(str1.compare(str2)==-1){
temp=str1;
str1=revese(str2);
str2=revese(temp);
flag=1;
min=str2.size();
}
}
else{
temp=str1;
str1=revese(str2);
str2=revese(temp);
flag=1;
min=str2.size();
}
temp.clear();
for(i=0; i<min; i++){
if(str1[i]-t<str2[i]){
temp+=str1[i]+10-t-str2[i]+48;
t=1;
}
else{
temp+=str1[i]-t-str2[i]+48;
t=0;
}
}
while(i<str1.size()){
if(!t){
while(i<str1.size()){
temp+=str1[i];
i++;
}
break;
}
if(str1[i]!='0'){ temp+=str1[i]-t; t=0; }
else temp+='9';
i++;
}
string s;
for(unsigned int k=temp.size()-1; k>=0; k--){
if(temp[k]!='0'){
for(int n=k; n>=0; n--)
s+=temp[n];
break;
}
}
if(flag) s='-'+s;
outcome=s;
return outcome;
}
string& BigFigure::multiplication(string &str1, string &str2){//乘法运算,已处理符号
char c='0',flag=0;
string temp1,temp2="0";
if(str1[0]=='0' || str2[0]=='0'){
outcome="0";
return outcome;
}
if(str1[0]=='-'){ flag++; str1.erase(0,1); }
if(str2[0]=='-'){ flag++; str2.erase(0,1); }
str1=revese(str1);
str2=revese(str2);
for(unsigned int i=0; i<str2.size(); i++){
c='0';
for(unsigned int j=0; j<str1.size(); j++){
temp1+=((str2[i]-48)*(str1[j]-48)+c-48)%10+48;
c=((str2[i]-48)*(str1[j]-48)+c-48)/10+48;
}
if(c!='0') temp1+=c;
temp1=revese(temp1);
for(int k=0; k<i; k++)
temp1+='0';
temp2=plus(temp1, temp2);
temp1.clear();
}
if(flag%2) temp2='-'+temp2;
outcome=temp2;
return outcome;
}

string& BigFigure::division(string &str1, string &str2){//除法运算,已处理符号
int str=0,flag=0,flag1=0,flag2=0;
string temp,temps,tempt;
if(str2=="0"){
outcome="Inf";
return outcome;
}
if(str2=="1" || str1=="0"){
outcome=str1;
return outcome;
}
if(str1[0]=='-'){ flag++; str1.erase(0,1); }
if(str2[0]=='-'){ flag++; str2.erase(0,1); }
for(unsigned int i=0; i<str1.size(); i++){//整除处理
str=0;
temp+=str1[i];
if(temp[0]=='0') temp.erase(0,1);
if(temp.size()>str2.size() ||
(temp.size()==str2.size() && temp.compare(str2)>=0)){
while(temp.size()>str2.size() ||
(temp.size()==str2.size() && temp.compare(str2)>=0)){
tempt=str2;
temp=subtration(temp, tempt);
str++;
}
temps+=str+48;
}
else if(temp.size()==str2.size() && temp.compare(str2)==0) temps+='1';
else temps+='0';
}
flag1=temps.size();
if(temp!="0" && precision) temps+='.';
for(int i=0; i<=precision && temp!="0"; i++){//小数后位的处理
str=0;
temp+='0';
if(temp.size()>str2.size() ||
(temp.size()==str2.size() && temp.compare(str2)>=0)){
while(temp.size()>str2.size() ||
(temp.size()==str2.size() &&temp.compare(str2)>=0)){
tempt=str2;
temp=subtration(temp, tempt);
str++;
}
temps+=str+48;
}
else if(temp.size()==str2.size() && temp.compare(str2)==0) temps+='1';
else temps+='0';
}
flag2=temps.size()-2;
if(temps[temps.size()-1]>='5' && flag2-flag1==precision){//四舍五入处理
temps.erase(flag1,1);
temps.erase(temps.size()-1, 1);
temp="1";
temps=plus(temps, temp);
if(temps.size()>flag2) temps.insert(flag1+1, 1, '.');
else temps.insert(flag1, 1, '.');
}
else if(flag2-flag1==precision) temps.erase(temps.size()-1, 1);
temp.clear();
for(unsigned int k=0; k<temps.size(); k++){//左端去零处理
if(temps[k]!='0' || temps[k+1]=='.'){
for(int n=k; n<temps.size(); n++)
temp+=temps[n];
break;
}
}
if(flag%2) temp='-'+temp;
outcome=temp;
return outcome;
}
int main(){//主函数
BigFigure a;
a.BigFigureInterface();
return 0;

C. C语言编写四则运算

请先给出明确答复:因为程序规定的是先输入操作符,再输入两个操作数

解释原因:请看下面部分的代码

  1. 第一个scanf("%c",&oper);这一句要求输入一个(注意是一个)字符格式的值,给oper;
  2. 如果你输樱旅入一个数字、英文等等,假如你第一个输入的是10,那oper就是1,而租滚不是10,因为%c一次只能读取一个字符;

  3. 接下来,输入第二第三个,程序再往下就会拿oper判断,如果oper等于-号,就会执行减法,如果等于+号就会执行加法;

  4. 所以你输入的操作数是不会匹配弊颂余任何运算符,就不能进行运算。

有无解决办法:

调换语句顺序:复制第一个printf那一行与第一个scanf那一行,注意这两行printf在scanf的上面,把这两句放到第二个scanf之后,第三个print之前。就能输入 1 空格 + 空格 2 回车,这种的

D. 怎么用C语言编写一个大整数的四则运算器,求解(急!!)

1.打开CodeBlocks,创建一个新的空白文件,定义头文件和主要功能,然后写程序的主体:

E. C语言中的任何类型数据都可进行四则运算吗为什么

不是的。x0dx0a四则运算 指 加减轮睁掘乘除。只有 int, float, double, char 型,能存放 算术数值的 才行。x0dx0a数据 有 整型(十进制,八进制,十六进制,字符常量),浮点型(定点格式,e格式),布尔型(0,1)。它们之间可以做四则运算。x0dx0a字符串型,结构型(包括typedef 定义出来的 类型早租)数据 等 不能进行四则运算。x0dx0a另外,各类数据大小范围 有限腊核制,超界的数据,和运算后朝界的 也不能进行四则运算。

F. C语言怎么实现四则运算

楼上在扯淡!
你要使用字符串匹配,用swich,case语句来实现+,-,*,/的的实现,还要加上/0的判断才行

G. 如何利用c语言利用子函数实现四则运算 加,减,乘,除

#include<stdio.h>
void add(float a,float b)
{
printf("%f",a+b);
}

void sub(float a,float b)
{
printf("%f",a-b);
}

void mul(float a,float b)
{
printf("%f",a*b);
}

void div(float a,float b)
{
printf("%f",a/b);
}
int main()
{
int c;
float a,b;
printf("迟链两数相加,选1;\n");
printf("两数相减,选2;\n");
printf("两数相乘,选3;\n");
printf("两数相除,选4.\n");
scanf("纤铅%d",&c);
if(c!=1&&c!=2&&c!=3&&c!=4)
{
printf("码竖孙输入不合法!!");
exit(0);
}
printf("请输入操作数a和b:");
scanf("%f%f",&a,&b);
switch(c)
{
case 1:add(a,b);break;
case 2:sub(a,b);break;
case 3:mul(a,b);break;
case 4:div(a,b);break;
}
return 0;
}

H. 输入两个整数,进行加减乘除四则运算的c语言程序怎么写啊,拜托了~

代码抄

#include<stdio.h>

int main()

{

int a,b;

scanf("%d %d",&a,&b);

printf("%d ",a + b);

printf("%d ",a - b);

printf("%d ",a * b);

printf("%d ",a / b);

return 0;

}

运行截图


分析

C语言中的加减乘除和数学中的加减乘除一样,不同在于符号的表示问题,乘号需要用“*”表示。除号需要用“/”表示。新手学习C语言,很容易把除号和取余好混淆,强调一下,取余号是“%”,百分号就是取余的意思。因此在输入两个整数以后,按照数学方法就可以直接输出结果,整数的输入用scanf()函数。

I. C语言四则运算

/*在TC2 和 VC6下都可以顺利运行。
做了一个下午。一定要用我这个噢。
有简单的输入错误检测。有完整的说明和
注释*/

#include /*库文件包含*/
#include /*用于字符串操作*/
#include /*用于exit函数*/

/**************************************************************************
int check(char *c)
输入参数:
char *c: 输入的字符串
返回参数:
0:字符串中有晌悄不符合规定的字符
1: 字符串字符符合规定,没有不符合规定的字符.
功能:
检查字符串中有否除了 0-9, +,-,*,/,(,),之外的其他字符,
如果有,则返回0, 表示出现错误。
若没有,则返回1,表式字符串符合规定。
**************************************************************************/
int check(char *c)
{
int k=0;
while(*c!='\0')
{
if((*c>='0' && *c<='9') || *c=='+' ||
*c=='-' || *c=='*' || *c=='/晌嫌' ||
*c=='.' || *c=='(' || *c==')' )
{

}
else
{
printf("input error, there have the char not the math expression char!\n");
return 0;
}

if(*c=='(')
k++;
else if(*c==')')
k--;

c++;
}
if(k!=0)
{
printf("input error, there is not have correct bracket '()'!\n");
return 0;
}
return 1;
}

/**************************************************************************
void move(char *f, double *s,int p)

输入参数:
char *f : 运算符数组
double *s: 数值数组
int p: 当前运算符数组宴谨渣位置。
返回参数:

功能:
将当前已经完成运算的运算符消去,同时将数值数组的位置调整以进行下一次运算。
传入值p若为3
则当前符号的数组位置为3.
f[3]=f[3+1].......f[len-2]=f[len-1] f[len-1]='\0';
s[i]=s[i+1].......s[len-1]=s[len] 因为数值比运算符多一个。
***************************************************************************/

void move(char *f, double *s,int p)
{
int i=0,len=strlen(f);
for(i=p; i<len; i++) /*将已经运算过的符号,空出来的位置用后面的符号来填充,*/
{ /*即把乘和除号的位置用后面的加和减号填充*/
f[i]=f[i+1];
s[i]=s[i+1];
}
s[i]=s[i+1];
f[len-1]='\0';
}
/**************************************************************************
double convnum(char *c)
输入参数:
char *c :由数字和小数点组成的字符,用以转换成double型的数值。
返回参数:
num:返回转换好的值。
功能:
将输入的字符串先将其小数点以前的部分复制到temp[]数组中,
若有小数点,则将小数点之后的数值,也就是小数部分先进行计算,值存入num中
计算完成后,再对整数部分进行计算,值加上小数部分的值,存入num中。
***************************************************************************/
double convnum(char *c)
{
double num=0.0;
double a=1.0;
int i=0,p=0,len=0;
char temp[100];
int tempi=0;
int start=0;
int f=1; /*正负符号指示器,若为1则为正数,为-1,此数为负数*/

len=strlen&;;

if(c[0]=='-')
{
start=1;
f=-1;
}
for(i=start; i<len; i++)
{
if(c[i]=='.')
{
p=i;
break;
}
temp[tempi++]=c[i]; /*将整数部分复制到temp[]中*/
}
temp[tempi]='\0';

if(p!=0)
{
for(i=p+1;i<len;i++) /*将小数部分计算出来*/
{
if(c[i]=='.') /*如果有多余的小数点,则表示输入错误*/
{
printf("there is more that one dot '.' in number!error!\n");
exit(0);
}
a=a*0.1;
num+=(a*(c[i]-48));
}
}

a=1.0;

len=strlen(temp); /*计算整数部分*/
for(i=len-1;i>=0; i--)
{
num=num+(a*(temp[i]-48));
a*=10;
}

num=num*f;
return num;
}

/**************************************************************************
double good(char *c)
输入参数:
char *c :即将进行运算的字符串型数学表达式。如3.5+(2*3/5)
返回参数:
s[0]:计算结果将放入s[0]中
功能:
将输入的字符串中的数字分别调用convnum(char *c)函数进行数值变换,再将其依
次存入doulbe s[i]中,将加减乘除运算符依次存入字符串符号数组 char f[i]中,
然后如果遇到括号,则将括号内的字符串存入另一字符数组中,然后用此
good(char *c) 递归函数进行递归运算。 然后根据先乘除,后加减的顺序对已
存入数组的数值根 据存入字符串符号数组的运算符进行运算。结果存入s[0]中。
返回最终结果。
***************************************************************************/
double good(char *c) /*可递归函数*/
{ /*取得数值字符串,并调用convnum转换成double*/
char g[100],number[30]; /*g,保存当前的表达式串,number保存一个数的所有字符*/
char f[80]; /*保存所有的符号的堆栈*/
int fi=0; /*保存符号的位置指针*/
double s[80]; /*保存当前所有的数的一个堆栈*/
int si=0; /*保存数字位置指针*/
int k=0; /* 若k=1则表示有一对括号*/
int num=0,i=0; /*num保存新括号内的字符数,i 保存number里的字符位置*/
int cc=0; /*乘除符号数量*/
int jj=0; /*加减符号数量*/

while(*c!='\0')/*当p==1 和k==0时,表示已经把括号里的内容全部复制到g[100]中了*/
{
k=0;
num=0;

switch(*c)
{
case '+': /*当前字符为+-乘除时则表示*/
case '-':
case '*':
case'/':
f[fi++]=*c;
if(*c=='*' || *c=='/')
cc++;
else
jj++;
if(*(c-1)!=')')
{
number[i]='\0';
i=0;/*完成一个数字的复制,其位置指针i=0*/

s[si++]=convnum(number);
}
break;
case'(': /*有括号,则将当前括号作用范围内的全部字符保存,作为*/
k++; /*一个新的字符表达式进行递归调用good函数计算。*/
while(k>0)
{
c++;
g[num]=*c;
num++;
if(*c==')')
{
k--;
}
else if(*c=='(')
{
k++;
}
}
g[num-1]='\0';
num=0;/*完成一个括号内容的复制,其位置指针num=0*/
s[si++]=good(g);
break;
default:
number[i++]=*c;

if(*(c+1)=='\0')
{ number[i]='\0';
s[si++]=convnum(number);
}
break;
}

c++;
}

f[fi]='\0';

i=0;
while(cc>0)
{
switch(f[i])
{
case '*': cc--;
s[i+1]=s[i]*s[i+1];
move(f,s,i);
break;
case '/': cc--;
s[i+1]=s[i]/(float)s[i+1];
move(f,s,i);
break;
default:
i++;
break;
}
}

i=0;
while(jj>0)
{
switch(f[i])
{
case '+': s[i+1]=s[i]+s[i+1];
jj--;
move(f,s,i);
break;
case '-': s[i+1]=s[i]-s[i+1];
jj--;
move(f,s,i);
break;
default:
printf("operator error!");
break;
}
}

return s[0];
}

void main()
{
char str[100];
double sum=0;
int p=1;

while(1)
{
printf("enter expression: enter 'exit' end of program\n");
scanf("%s",str);
p=strcmp(str,"exit");
if(p==0)
break;
p=check(str);

if(p==0)
continue;
sum=good(str);
printf("%s=%f",str,sum);
printf("\n");
}
printf("good bye!\n");
}

例:
enter expression: enter 'exit' end of program
3.5+(12.3*15+8-(3/2+1))*2+(3.2*3-5)/6(输入)
3.5+(12.3*15+8-(3/2+1))*2+(3.2*3-5)/6=384.266667
enter expression: enter 'exit' end of program
china(输入)
input error, there have the char not the math expression char!
enter expression: enter 'exit' end of program
exit(输入)
good bye!

J. C语言大整数的四则运算

#include<stdio.h>
int搜此mul(inta[],intk)
{inti,t=0;
for(i=1;i<=a[0];i++)
{a[i]=k*a[i]+t;
t=a[i]/10;
a[i]%=10;
}
for(i=a[0];t;)世闹迅
{a[++a[0]]=t%10;
t/=10;
}
}
intmain()
{inti,n,a[102]={1,1};
scanf("%d",&n);
printf("%d!=",n);
for(i=2;i<=n;i++)
弯袜mul(a,i);
for(i=a[0];i>0;i--)
printf("%d",a[i]);
return0;
}

阅读全文

与c语言大数据四则运算相关的资料

热点内容
java读取文件指定路径 浏览:754
linux系统ghost 浏览:538
大数据跟编程哪个难 浏览:693
电脑文件内容怎么多选 浏览:589
机顶盒共享文件夹 浏览:286
网络语我什么 浏览:672
生死狙击金币修改器视频教程 浏览:154
汉字编程语言有哪些 浏览:49
access合并多个文件 浏览:562
为什么微信的文件要用第三方打开 浏览:591
华为手机有什么可以编程的软件 浏览:169
北京通app能放什么 浏览:796
在职网站有哪些 浏览:934
nodejs怎么跑起来 浏览:945
jsp中显示当前时间 浏览:236
红米note4设备代码 浏览:460
iPad已越狱忘记密码 浏览:723
如何用sql语句关闭数据库 浏览:27
mac如何卸载程序 浏览:526
原版安装镜像文件路径 浏览:602

友情链接