[C语言四则运算程序高手帮帮忙]#include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> int scan() { char s[100]; int i,t,z=0; do { z=0; gets(s); for(i=0;s[i]!='\0';i++) if(s[...+阅读
精度计算--除法(C 的,跟C很类似)char big_compare (char* a, char* b, int la, int lb) //除法辅助函数{ int i; if (la!=lb) return la-lb; for (i=0;i= la-lb 1 & ld >= lb{ int i,t,lr; char* r; memset(c,0,sizeof(char)*lc); //把c数组清成0 t = la-lb 1; lr = lb -1; r = d ld-lr; for (i=0;i0) { for (i=0;i=0) { s ; big_sub(r,b,lr,lb); if (!*r) {r ; lr--;} } c[lc-t] = s; //coutstrlen(b)) l=strlen(a) 2; elsel=strlen(b) 2;c=(char *) malloc(l*sizeof(char));i=strlen(a)-1;j=strlen(b)-1;k=0;up=0;while(i>=0||j>=0){if(i9) {up=1;z%=10;} else up=0;c[k ]=z '0';i--;j--;}if(up) c[k ]='1';i=0;c[k]='
c语言大数算法
#include#include#define MAXSIZE 600 void Add(char *str1, char *str2, char *str3){// str3 = str1 + str2; int i, j, i1, i2, tmp, carry; int len1 = strlen(str1), len2 = strlen(str2); char ch; i1 = len1-1; i2 = len2-1; j = carry = 0; for( ; i1 >= 0 & i2 >= 0; ++j, --i1, --i2 ) { tmp = str1[i1]-'0'+str2[i2]-'0'+carry; carry = tmp/10; str3[j] = tmp%10+'0'; } while( i1 >= 0 ) { tmp = str1[i1--]-'0'+carry; carry = tmp/10; str3[j++] = tmp%10+'0'; } while( i2 >= 0 ) { tmp = str2[i2--]-'0'+carry; carry = tmp/10; str3[j++] = tmp%10+'0'; } if( carry ) str3[j++] = carry+'0'; str3[j] = '\0'; for( i=0, --j; i= 0; --i1 ) { j = jj; for( i2=len2-1; i2 >= 0; --i2, ++j ) { tmp = (str3[j]-'0')+(str1[i1]-'0')*(str2[i2]-'0')+carry; if( tmp >9 ) { carry = tmp/10; str3[j] = tmp%10+'0'; } else { str3[j] = tmp+'0'; carry = 0; } } if( carry ) { str3[j] = carry+'0'; carry = 0; ++j; } ++jj; } --j; while( str3[j] == '0' & j >0 ) --j; str3[++j] = '\0'; for( i=0, --j; i
大数四则运算完整代码
struct Node // 定义一个双向链表用来存贮结果{char data; // 数据*定义为字符的原因:要显示负号Node *next; // 尾指针Node *ahead; // 首指针};/*--------------------------------------------------------------------------*函数名称: 大数加法*函数过程:1 比较两个数那一个长* 2 以长的作为循环次数* 3 对应项相加 进位存贮直到下高位相加用* 4 直到循环结束* 5 !!!!!!没设计负数相加*入口参数:numa,numb,result字符串*出口参数:无*编辑环境:winSP2 + VC2003 + C++*--------------------------------------------------------------------------*/void addition(char *numa, char *numb,char *result) // 计算两大数之和{ char *pna = findend(numa); // 指向numa的一个指针。point numa pna 指向乘数的最低位, char *pnb = findend(numb); //指向numb的一个指针 //pnb 指向被乘数的最低位, int along=(int)strlen(numa); //标记数字a的长度; int blong=(int)strlen(numb); //标记数字b的长度; int times = 0; // 标致要计算多少次。
int carry=0,temp_result; //存贮进位 和临时结果的 Node *head, // 用于存贮头指针 *pstart, // 用于存贮计算时的首指针 *pnew; //作于申请新结点 head = pstart =new Node; //初始化首结点和头结点。 pstart ->data = 0; pstart ->next = NULL; pstart ->ahead = NULL; if (abigerb(numa ,numb)>=1) times = (int)strlen(numa); //比较两个字符串长度,以大的作为循环次数 else { times = (int)strlen(numb); pna = findend(numb); //交换指针 pnb = findend(numa); along=(int)strlen(numb); //标记数字a的长度; blong=(int)strlen(numa); //标记数字b的长度; } while ((times-- & (times>=0))|| carry != 0) { if(!pstart->next) //如果当前为空结点,则申请新结点 { pnew = new Node; pnew ->data = 0; pnew ->next = NULL; pnew ->ahead = pstart; pstart ->next = pnew; } else temp_result =(pstart->data +(*pna-48)+(*pnb-48)+carry) ; //自身的值+新值+进位 作为当前的新值 pstart ->data = temp_result%10; //存贮个位 carry = temp_result/10; //存贮进位 pstart = pstart ->next; //结点移动 blong--; if(blong>0)pnb--; //指针移向被加数高位 else *pnb=48; //之后相减就变为了0不作任何运算; pna--; //加数指针移动, } pstart =head; //寻找链表的结尾点 while(pstart->next != 0) { pstart->data += 48; //!!>逆顺输出 pstart = pstart->next ; } int tip = 0; //转为字符串用 pstart = pstart->ahead ; //找有效字 //coutahead ; } result[tip] = '\0'; pstart =head; //释放空间 while(pstart->next != 0) { pnew = pstart->next ;delete pstart; pstart =pnew; } return ;}//比较两个数字符串大小的函数//返回值说明:0是alongblong ; 2是along=blongint abigerb(char *numa, char *numb) //比较两个数最高位那一个大{ int along=(int)strlen(numa); //标记数字a的长度; int blong=(int)strlen(numb); //标记数字b的长度; char *pna = numa; //指向数A的最高位, char *pnb = numb; //指向数B的最高位, if (along>blong) return 1; if (along==blong) { while(*pna) //比较两个数那一个大 { if(*pna>*pnb)return 1; else if(*pnadata = 0; pstart ->next = NULL; pstart ->ahead = NULL; if (abigerb(numa ,numb)) times = strlen(numa);//比较两个字符串长度,以大的作为循环次数 else //交换位置以降低难度 { times = strlen(numb);//让数(字符串)长的减去数(字符串)短的 pna = findend(numb);//交换指针 pnb = findend(numa); along=(int)strlen(numb);//标记数字a...
用链表法做大整数四则运算C语言程序
只做了加法,思路应该都是这个 #include
(1) { if(data=='\n') { break; } s=(Link_list)malloc(sizeof(List)); s->data=data-'0'; s->next=h->next; h->next=s; data=getchar(); } return h; } void out_put(Link_list h) { Link_list s=NULL; s=h->next; while(s!=NULL) { printf("%d",s->data); s=s->next; } printf("\n"); } Link_list add(void) { Link_list h=NULL; Link_list s1=NULL; Link_list s2=NULL; Link_list p=NULL; printf("输入第一个数据以回车结束:\n"); s1=create_list(); s1=s1->next; printf("输入第二个数据以回车结束:\n"); s2=create_list(); s2=s2->next; h=(Link_list)malloc(sizeof(List)); h->data=0; h->next=NULL; while(s1!=NULL && s2!=NULL) { p=(Link_list)malloc(sizeof(List)); p->data=s1->data+s2->data+h->data; h->data=0; if(p->data>9) { p->data=p->data-10; h->data=1; } p->next=h->next; h->next=p; s1=s1->next; s2=s2->next; } while(s1!=NULL) { p=(Link_list)malloc(sizeof(List)); p->data=s1->data+h->data; h->data=0; if(p->data>9) { p->data=p->data-10; h->data=1; } p->next=h->next; h->next=p; s1=s1->next; } while(s2!=NULL) { p=(Link_list)malloc(sizeof(List)); p->data=s2->data+h->data; h->data=0; if(p->data>9) { p->data=p->data-10; h->data=1; } p->next=h->next; h->next=p; s2=s2->next; } if(h->data==1) { p=(Link_list)malloc(sizeof(List)); p->data=1; p->next=h->next; h->next=p; } return h; } int main() { int select = 0; Link_list h=0; printf("请选择功能:\n"); printf("1 - 相加\n"); printf("2 - 相减\n"); printf("3 - 相乘\n"); printf("4 - 相除\n"); printf("0 - 退出\n"); while
(1) { printf("选择功能\n"); scanf("%d",&select); if(0 == select) { break; } switch(select) { case 1: h=add(); printf("所求的和:\n"); out_put(h); break; case 2: break; case 3: break; case 4: break; default : printf("输入有误\n"); break; } } }
以下为关联文档:
C语言四则运算程序高手帮帮忙!#include #include #include #include int scan() { char s[100]; int i,t,z=0; do { z=0; gets(s); for(i=0;s[i]!='\0';i++) if(s[i]'9') break; if(i>=strlen(s)) for(t=...
C语言问题四则运算程序我怀疑你代码的这段有问题: else if(ch == ')') { optr = MathOptr(ch); while(!Stack1Empty(&OptrStack) & Peek1(&OptrStack).stackprecedence >= optr.inputprecedence) //...
求c语言编写四则运算程序#include"stdafx.h" #include #include #include char token;/*global token variable*/ /*function prototypes for recursive calls*/ float exp(void); float term(void);...
C语言编写程序四则运算法则1234567891011121314151617# include <stdio.h>int main(void){ int a,b,s; char c; scanf("%d%c%d",&a,&c,&b); switch(c) { case '+':s=a+b;break; case '-':s=a-b;break; c...
求一个c语言的大数阶乘程序源代码希望对你有帮助—— //#include "stdafx.h"//VC++6.0要用这一行 #include "stdio.h" #include "math.h" #include "stdlib.h" char *FactorialLN(int n){ int i,j,k,tmp,len; char *...
c语言离散数学集合复合运算的代码 R//说明:输入的格式需要提示按输入,因为要获取正确的有序对才能进行复合运算/**************输入格式如:a b, #,# 退出*************** 输入:a b 输入:b t 输入:t d 输入:s j 输入:j i...
可进行四则运算的仿windows计算器c语言代码#include <stdio.h> void main() { double a,b; char c; scanf("%lf",&a); while((c=getchar())==' '); scanf("%lf",&b); switch(c) { case '+': { printf("%lf\n",a+b); break;...
用if语句编写四则运算的C语言程序#include"stdio.h" void main() { int x,y,z; char c; scanf("%d%d",&x,&y); gtchar(c); switch(c) { case '+': z=x+y; case '-': z=x-y; case '*': z=x*y; case '/': z=x/y; }...
一个计算机运算的代码用C语言实现一个计算机运算的代码用C语言实现,霍夫曼编码用c语言实现:1. 能够实现基本的加减乘除 2.能够实现乘方计算 3.能够实现求余#include <stdio.h> double add(double a,double b)...