C语言 大整数除法
我们老师要求我们做个大整数除法(c语言),可是真的很有难度,没有办法做出来。上交的时间快到了,到时没作业交就会直接挂科的了!希望各位大牛能帮忙做一个大整数除法啊!
真的万分感激啊!
#include <stdio.h> #include <string.h> #include <list> using namespace std; void convert(char *a,list<int> &a1) {/*转换函数*/ a1.clear(); int len=strlen(a); int i; for(i=0;i<len;i++) a1.push_back(a[i]-'0'); while(*a1.begin()==0) a1.pop_front(); } void print(list<int> &a) { /*打印函数*/ list<int>::iterator it; it=a.begin(); if(a.empty()) {printf("0\n"); return;} for(it;it!=a.end();it++) printf("%d",*it); printf("\n"); } void sub(list<int> &a,list<int> &b, list<int> &c) { /*大整数的减法*/ c.clear(); list<int>::reverse_iterator rita=a.rbegin(); list<int>::reverse_iterator ritb=b.rbegin(); short carry=0; int temp; while(rita!=a.rend()&&ritb!=b.rend()) { temp=*rita-*ritb+carry; if(temp<0) { temp+=10; carry=-1; } else carry=0; c.push_front(temp); rita++; ritb++; } while(rita!=a.rend()) { temp=*rita+carry; if(temp<0) { temp+=10; carry=-1;} else carry=0; c.push_front(temp); rita++; } while(*c.begin()==0) c.pop_front(); } bool compare(list<int> &a,list<int> &b) { /*大整数的比较*/ if(a.size()>b.size()) return true; else if(a.size()<b.size()) return false; else { list<int>::iterator ita=a.begin(),itb=b.begin(); while(ita!=a.end()) { if(*ita>*itb) return true; else if(*ita<*itb) return false; else { ita++; itb++;} } return true; } } void divid(list<int> &a,list<int> &b, list<int> &c) { /* 大整数的除法*/ c.clear(); list<int> row,temp; list<int>::iterator ita,itc=c.begin(); int count; for(ita=a.begin();ita!=a.end();ita++) { count=0; while(*row.begin()==0) row.pop_front(); row.push_back(*ita); while(compare(row,b)) { count++; sub(row,b,temp); row=temp; } c.push_back(count); } while(*c.begin()==0) c.pop_front(); } int main() { char sa[901],sb[901]; list<int> a,b,c; while(scanf("%s%s",sa,sb)==2) { convert(sa,a); convert(sb,b); divid(a,b,c); print(c); } return 0; }这个还算好,只用了STL中的链表。没有用类,也没用运算符重载。。凑合看吧。