大整数除法

描述
求两个大的正整数相除的商。

输入
第1行是被除数,第2行是除数。每个数均不超过100位。
输出
一行,相应的商的整数部分
样例输入
2376
24
样例输出
99

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
python的除法计算,为什么和计算器计算的不一样?
需要把一段java代码重写为python的,运行结果总是不对,调试后发现是python在计算过程中和java有些不一样。 比如计算下面这个数字: ``` 1811552740395741107/62 ``` java和win10系统计算器计算的结果都是 【29218592587028082】 但是,python计算的结果是-------------【29218592587028084】 为什么会相差2? ![图片说明](https://img-ask.csdn.net/upload/202001/04/1578111406_861278.jpg) 很难受,是什么原因导致的这种情况,python在这其中是有一些坑是我不知道的吗? # #更新 ``` 在stackOverflow上找到了解决办法,用运算符'//'代替'/'。 1811552740395741107 // 62 '//'表示整数除法,结果是整数?程序结果是正确了,但是不知道为什么,之前的结果相差2,也不是进位退位导致的吧。 不知道python的'/'底层是怎么实现的,大数运算过程中二进制位产生了累积误差? 还发现一个问题,绝对值函数math.fabs(),下列代码: t = -1811552740395741107 if -t == math.fabs(t): print(-t) print('%f' % math.fabs(t)) 两条print是可以执行的,但是输出结果是: 1811552740395741107 1811552740395741184.000000 也就是说在内存中的二进制数是相等的,但是打印出两个数却不一样? 如果拿fabs()得到的结果去计算,程序和预期的结果又不一样,很烦,今天踩了很多坑! ``` **有谁知道其中的原因么,为什么Python的行为和其他语言不一样?这应该不是BUG吧**
用位运算实现两个整数的除法的程序,帮忙解释解释~谢谢
int Div(int dividend,int divisor) { int sign = 1; if ((dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0)) { sign = -1; } unsigned int x = (unsigned int)abs(dividend); unsigned int y = (unsigned int)abs(divisor); int bitCnt = sizeof(int) << 3;//bitCnt = 4 << 3 = 32 int quotient = 0; //无符号除法所得的商(quotient) int k = bitCnt - 1;//k = 31 while (0 == ((1 << k) & y)) { k --; } for (int j = bitCnt - 1 - k; j >= 0; j --) { if (x >= (y << j)) { x -= (y << j); quotient += (1 << j); } } return sign * quotient; }
C++大整数运算 利用已有的大整数怎么实现三个运算
我有以下的C++代码,请问我该如何实现以下三个运算?如果我在定义大整数的类中定义三个友元函数,能否直接使用我定义的“运算符重载”? a) 求出100以内的数的阶乘; b) 一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。当N=4时,1634满足条件,因为1^4 + 6^4 + 3^4 + 4^4 = 1634(其中“^”表示乘方),求N=21时,所有满足条件的花朵数。注意:这个整数有21位,它的各个位数字的21次方之和正好等于这个数本身。 c) 实现N个大整数的排序算法; 代码如下: #include<iostream> #include<string> #include<iomanip> #include<algorithm> using namespace std; #define MAXN 9999 #define MAXSIZE 10 #define DLEN 4 class BigNum { private: int a[500]; //可以控制大数的位数 int len; //大数长度 public: BigNum(){ len = 1;memset(a,0,sizeof(a)); } //构造函数 BigNum(const int); //将一个int类型的变量转化为大数 BigNum(const char*); //将一个字符串类型的变量转化为大数 BigNum(const BigNum &); //拷贝构造函数 BigNum &operator=(const BigNum &); //重载赋值运算符,大数之间进行赋值运算 friend istream& operator>>(istream&, BigNum&); //重载输入运算符 friend ostream& operator<<(ostream&, BigNum&); //重载输出运算符 BigNum operator+(const BigNum &) const; //重载加法运算符,两个大数之间的相加运算 BigNum operator-(const BigNum &) const; //重载减法运算符,两个大数之间的相减运算 BigNum operator*(const BigNum &) const; //重载乘法运算符,两个大数之间的相乘运算 BigNum operator/(const int &) const; //重载除法运算符,大数对一个整数进行相除运算 BigNum operator^(const int &) const; //大数的n次方运算 int operator%(const int &) const; //大数对一个int类型的变量进行取模运算 bool operator>(const BigNum & T)const; //大数和另一个大数的大小比较 bool operator>(const int & t)const; //大数和一个int类型的变量的大小比较 void print(); //输出大数 }; BigNum::BigNum(const int b) //将一个int类型的变量转化为大数 { int c,d = b; len = 0; memset(a,0,sizeof(a)); while(d > MAXN) { c = d - (d / (MAXN + 1)) * (MAXN + 1); d = d / (MAXN + 1); a[len++] = c; } a[len++] = d; } BigNum::BigNum(const char*s) //将一个字符串类型的变量转化为大数 { int t,k,index,l,i; memset(a,0,sizeof(a)); l=strlen(s); len=l/DLEN; if(l%DLEN) len++; index=0; for(i=l-1;i>=0;i-=DLEN) { t=0; k=i-DLEN+1; if(k<0) k=0; for(int j=k;j<=i;j++) t=t*10+s[j]-'0'; a[index++]=t; } } BigNum::BigNum(const BigNum & T) : len(T.len) //拷贝构造函数 { int i; memset(a,0,sizeof(a)); for(i = 0 ; i < len ; i++) a[i] = T.a[i]; } BigNum & BigNum::operator=(const BigNum & n) //重载赋值运算符,大数之间进行赋值运算 { int i; len = n.len; memset(a,0,sizeof(a)); for(i = 0 ; i < len ; i++) a[i] = n.a[i]; return *this; } istream& operator>>(istream & in, BigNum & b) //重载输入运算符 { char ch[MAXSIZE*4]; int i = -1; in>>ch; int l=strlen(ch); int count=0,sum=0; for(i=l-1;i>=0;) { sum = 0; int t=1; for(int j=0;j<4&&i>=0;j++,i--,t*=10) { sum+=(ch[i]-'0')*t; } b.a[count]=sum; count++; } b.len =count++; return in; } ostream& operator<<(ostream& out, BigNum& b) //重载输出运算符 { int i; cout << b.a[b.len - 1]; for(i = b.len - 2 ; i >= 0 ; i--) { cout.width(DLEN); cout.fill('0'); cout << b.a[i]; } return out; } BigNum BigNum::operator+(const BigNum & T) const //两个大数之间的相加运算 { BigNum t(*this); int i,big; //位数 big = T.len > len ? T.len : len; for(i = 0 ; i < big ; i++) { t.a[i] +=T.a[i]; if(t.a[i] > MAXN) { t.a[i + 1]++; t.a[i] -=MAXN+1; } } if(t.a[big] != 0) t.len = big + 1; else t.len = big; return t; } BigNum BigNum::operator-(const BigNum & T) const //两个大数之间的相减运算 { int i,j,big; bool flag; BigNum t1,t2; if(*this>T) { t1=*this; t2=T; flag=0; } else { t1=T; t2=*this; flag=1; } big=t1.len; for(i = 0 ; i < big ; i++) { if(t1.a[i] < t2.a[i]) { j = i + 1; while(t1.a[j] == 0) j++; t1.a[j--]--; while(j > i) t1.a[j--] += MAXN; t1.a[i] += MAXN + 1 - t2.a[i]; } else t1.a[i] -= t2.a[i]; } t1.len = big; while(t1.a[len - 1] == 0 && t1.len > 1) { t1.len--; big--; } if(flag) t1.a[big-1]=0-t1.a[big-1]; return t1; } BigNum BigNum::operator*(const BigNum & T) const //两个大数之间的相乘运算 { BigNum ret; int i,j,up; int temp,temp1; for(i = 0 ; i < len ; i++) { up = 0; for(j = 0 ; j < T.len ; j++) { temp = a[i] * T.a[j] + ret.a[i + j] + up; if(temp > MAXN) { temp1 = temp - temp / (MAXN + 1) * (MAXN + 1); up = temp / (MAXN + 1); ret.a[i + j] = temp1; } else { up = 0; ret.a[i + j] = temp; } } if(up != 0) ret.a[i + j] = up; } ret.len = i + j; while(ret.a[ret.len - 1] == 0 && ret.len > 1) ret.len--; return ret; } BigNum BigNum::operator/(const int & b) const //大数对一个整数进行相除运算 { BigNum ret; int i,down = 0; for(i = len - 1 ; i >= 0 ; i--) { ret.a[i] = (a[i] + down * (MAXN + 1)) / b; down = a[i] + down * (MAXN + 1) - ret.a[i] * b; } ret.len = len; while(ret.a[ret.len - 1] == 0 && ret.len > 1) ret.len--; return ret; } int BigNum::operator %(const int & b) const //大数对一个int类型的变量进行取模运算 { int i,d=0; for (i = len-1; i>=0; i--) { d = ((d * (MAXN+1))% b + a[i])% b; } return d; } BigNum BigNum::operator^(const int & n) const //大数的n次方运算 { BigNum t,ret(1); int i; if(n<0) exit(-1); if(n==0) return 1; if(n==1) return *this; int m=n; while(m>1) { t=*this; for( i=1;i<<1<=m;i<<=1) { t=t*t; } m-=i; ret=ret*t; if(m==1) ret=ret*(*this); } return ret; } bool BigNum::operator>(const BigNum & T) const //大数和另一个大数的大小比较 { int ln; if(len > T.len) return true; else if(len == T.len) { ln = len - 1; while(a[ln] == T.a[ln] && ln >= 0) ln--; if(ln >= 0 && a[ln] > T.a[ln]) return true; else return false; } else return false; } bool BigNum::operator >(const int & t) const //大数和一个int类型的变量的大小比较 { BigNum b(t); return *this>b; } void BigNum::print() //输出大数 { int i; cout << a[len - 1]; for(i = len - 2 ; i >= 0 ; i--) { cout.width(DLEN); cout.fill('0'); cout << a[i]; } cout << endl; }
C++大整数求和算法求解
我们课程设计叫写一个大整数求和的算法,但是在重载加法运算符的时候出现了一个bug,一直不知道错在哪里,怎么改,但是大概知道应该是数据类型不匹配的缘故,可就是不知道到底怎么改,求解!!! 主函数部分: #include<iostream> #include<string> using namespace std; #include"bigInt.h" //功能函数声明 void menu();//主界面函数 int main() { //测试 string a = "992"; string b = "74"; bigInt b1(a);//定义测试数据 bigInt b2(b); bigInt temp;//定义一个临时变量用来存储计算结果 我们课程设计叫写一个大整数求和的算法,但是在重载加法运算符的时候出现了一个bug,一直不知道错在哪里,怎么改,但是大概知道应该是数据类型不匹配的缘故,可就是不知道到底怎么改,求解!!! 主函数部分: #include<iostream> #include<string> using namespace std; #include"bigInt.h" //功能函数声明 void menu();//主界面函数 int main() { //测试 string a = "992"; string b = "74"; bigInt b1(a);//定义测试数据 bigInt b2(b); bigInt temp;//定义一个临时变量用来存储计算结果 temp = b1 + b2; system("pause"); return 0; } bigInt.h: #ifndef BIG_INT_H #define BIG_INT_H #include<string> //大整数的结构 class bigInt { public: friend ostream& operator<<(ostream &output, bigInt &a);//重载输出流运算符 friend bigInt operator+ (bigInt &a, bigInt &b);//重载加法运算 friend bigInt operator- (bigInt &a, bigInt &b);//重载减法运算 friend bigInt operator* (bigInt &a, bigInt &b);//重载乘法运算 friend bigInt operator/ (bigInt &a, bigInt &b);//重载除法运算 bigInt(string a);//构造函数,初始化表示大整数的这个数组 bigInt();//默认构造函数 ~bigInt();//析构函数 bigInt& operator= (bigInt &a);//重载赋值运算 private: int * m_bigInt; //顺序表的数组 int m_length; const int maxCapcity; }; #endif bigInt.cpp: #include<iostream> #include<string> using namespace std; #include"bigInt.h" //成员函数实现 bigInt& bigInt::operator=(bigInt &a) { for (int i = 0; i<a.m_length; i++) m_bigInt[i] = a.m_bigInt[i]; m_length = a.m_length; return *this; } bigInt::bigInt() :maxCapcity(30) //默认构造函数 { m_bigInt = new int[maxCapcity];//为大整数分配存储空间 m_length = 0;//变量初始化 } bigInt::bigInt(string a) :maxCapcity(30) //构造函数建立顺序表 { m_bigInt = new int[maxCapcity];//为大整数分配存储空间 m_length = 0;//变量初始化 //将字符数组转化为整型数组 int j = 0; for (int i = a.length() - 1; i >= 0; i--, j++)//将大整数的低位存储到数组的低位 { m_bigInt[j] = 0 + a[i] - 48; m_length++; } } bigInt::~bigInt() { delete[]m_bigInt; m_bigInt = NULL; m_length = 0; } //友元函数的实现 ostream& operator<<(ostream &output, bigInt &a) { for (int i = a.m_length - 1; i >= 0; i--) output << a.m_bigInt[i]; return output; } bigInt operator+ (bigInt &a, bigInt &b) { int flag = 0;//进位标志 bigInt temp; int m = a.m_length>b.m_length ? (b.m_length) : (a.m_length); int i = 0;//循环变量 for (i = 0; i<m; i++) { temp.m_bigInt[i] = (a.m_bigInt[i] + b.m_bigInt[i] + flag) % 10; flag = (a.m_bigInt[i] + b.m_bigInt[i] + flag) / 10; } for (; i<a.m_length; i++) { temp.m_bigInt[i] = (a.m_bigInt[i] + flag) % 10; flag = (a.m_bigInt[i] + flag) / 10; } for (; i<b.m_length; i++) { temp.m_bigInt[i] = (b.m_bigInt[i] + flag) % 10; flag = (b.m_bigInt[i] + flag) / 10; } if (flag == 1) { temp.m_bigInt[i] = 1; temp.m_length = a.m_length>b.m_length ? (a.m_length + 1) : (b.m_length + 1); } return temp; } temp = b1 + b2; system("pause"); return 0; } bigInt.h: #ifndef BIG_INT_H #define BIG_INT_H #include<string> //大整数的结构 class bigInt { public: friend ostream& operator<<(ostream &output, bigInt &a);//重载输出流运算符 friend bigInt operator+ (bigInt &a, bigInt &b);//重载加法运算 friend bigInt operator- (bigInt &a, bigInt &b);//重载减法运算 friend bigInt operator* (bigInt &a, bigInt &b);//重载乘法运算 friend bigInt operator/ (bigInt &a, bigInt &b);//重载除法运算 bigInt(string a);//构造函数,初始化表示大整数的这个数组 bigInt();//默认构造函数 ~bigInt();//析构函数 bigInt& operator= (bigInt &a);//重载赋值运算 private: int * m_bigInt; //顺序表的数组 int m_length; const int maxCapcity; }; #endif bigInt.cpp: #include<iostream> #include<string> using namespace std; #include"bigInt.h" //成员函数实现 bigInt& bigInt::operator=(bigInt &a) { for (int i = 0; i<a.m_length; i++) m_bigInt[i] = a.m_bigInt[i]; m_length = a.m_length; return *this; } bigInt::bigInt() :maxCapcity(30) //默认构造函数 { m_bigInt = new int[maxCapcity];//为大整数分配存储空间 m_length = 0;//变量初始化 } bigInt::bigInt(string a) :maxCapcity(30) //构造函数建立顺序表 { m_bigInt = new int[maxCapcity];//为大整数分配存储空间 m_length = 0;//变量初始化 //将字符数组转化为整型数组 int j = 0; for (int i = a.length() - 1; i >= 0; i--, j++)//将大整数的低位存储到数组的低位 { m_bigInt[j] = 0 + a[i] - 48; m_length++; } } bigInt::~bigInt() { delete[]m_bigInt; m_bigInt = NULL; m_length = 0; } //友元函数的实现 ostream& operator<<(ostream &output, bigInt &a) { for (int i = a.m_length - 1; i >= 0; i--) output << a.m_bigInt[i]; return output; } bigInt operator+ (bigInt &a, bigInt &b) { int flag = 0;//进位标志 bigInt temp; int m = a.m_length>b.m_length ? (b.m_length) : (a.m_length); int i = 0;//循环变量 for (i = 0; i<m; i++) { temp.m_bigInt[i] = (a.m_bigInt[i] + b.m_bigInt[i] + flag) % 10; flag = (a.m_bigInt[i] + b.m_bigInt[i] + flag) / 10; } for (; i<a.m_length; i++) { temp.m_bigInt[i] = (a.m_bigInt[i] + flag) % 10; flag = (a.m_bigInt[i] + flag) / 10; } for (; i<b.m_length; i++) { temp.m_bigInt[i] = (b.m_bigInt[i] + flag) % 10; flag = (b.m_bigInt[i] + flag) / 10; } if (flag == 1) { temp.m_bigInt[i] = 1; temp.m_length = a.m_length>b.m_length ? (a.m_length + 1) : (b.m_length + 1); } return temp; }
求java大整数的四则运算解题思路,把具体用什么知识点讲解出来
package org.suanfa.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Test1 { private boolean isPositive=true; private String number="0"; public Test1() { } public Test1(String number) { String flag=number.substring(0, 1); if(flag.equals("-")){ this.isPositive=false; this.number=number.substring(1); }else{ this.isPositive=true; this.number = number; } } private int compare(String a,String b){ int MaxLen=0; if(a.length()>=b.length()){ MaxLen=a.length(); while(b.length()<MaxLen){ b="0"+b; } }else{ MaxLen=b.length(); while(a.length()<MaxLen){ a="0"+a; } } if(a.compareTo(b)>0) return 1; else if(a.compareTo(b)==0) return 0; else return -1; } public Test1 add(Test1 bigint){ Test1 bi=new Test1(); String a=this.number; String b=bigint.number; if((this.isPositive&&bigint.isPositive)||(!this.isPositive&&!bigint.isPositive)){//同符号 bi.isPositive=this.isPositive; bi.number=absAdd(a,b); }else{ if(compare(a,b)>0){ bi.isPositive=this.isPositive; bi.number=absSub(a,b); }else if(compare(a,b)==0){ bi.isPositive=true; bi.number="0"; }else{ bi.isPositive=bigint.isPositive; bi.number=absSub(a,b); } } return bi; } public Test1 sub(Test1 bigint){ Test1 bi=new Test1(); String a=this.number; String b=bigint.number; if((this.isPositive&&bigint.isPositive)||(!this.isPositive&&!bigint.isPositive)){ if(compare(a,b)>0){ bi.isPositive=this.isPositive; bi.number=absSub(a,b); }else if(compare(a,b)==0){ bi.isPositive=true; bi.number="0"; }else{ bi.isPositive=!bigint.isPositive; bi.number=absSub(a,b); } }else{ bi.isPositive=this.isPositive; bi.number=absAdd(a,b); } return bi; } public Test1 multi(Test1 bigint){ Test1 bi=new Test1(); String a=this.number; String b=bigint.number; if(a.equals("0")||b.equals("0")){ bi.isPositive=true; bi.number="0"; }else if((this.isPositive&&bigint.isPositive)||(!this.isPositive&&!bigint.isPositive)){ bi.isPositive=true; bi.number=absMulti(a,b); }else{ bi.isPositive=false; bi.number=absMulti(a,b); } return bi; } public Test1 div(Test1 bigint){ Test1 bi=new Test1(); String a=this.number; String b=bigint.number; if(a.equals("0")||b.equals("0")){ bi.isPositive=true; bi.number="0"; }else if((this.isPositive&&bigint.isPositive)||(!this.isPositive&&!bigint.isPositive)){ bi.isPositive=true; bi.number=absDiv(a,b); }else{ bi.isPositive=false; bi.number=absDiv(a,b); } return bi; } private String absAdd(String a, String b) { int MaxLen=0; if(a.length()>=b.length()){ MaxLen=a.length(); while(b.length()<MaxLen){ b="0"+b; } }else{ MaxLen=b.length(); while(a.length()<MaxLen){ a="0"+a; } } String str = ""; int JW = 0; // 进位 for (int i = MaxLen - 1; i >= 0; i--) { int tempA = a.charAt(i)-'0'; int tempB = b.charAt(i)-'0'; int temp; if (tempA + tempB + JW >= 10 && i != 0) { //如果有进位 temp = tempA + tempB + JW - 10; JW = 1; } else { temp = tempA + tempB + JW; JW = 0; } str = String.valueOf(temp) + str; } while(str.length()>1&&str.charAt(0)=='0'){ str=str.substring(1); } return str; } private String absSub(String a, String b) { int MaxLen=0; if(a.length()>=b.length()){ MaxLen=a.length(); while(b.length()<MaxLen){ b="0"+b; } }else{ MaxLen=b.length(); while(a.length()<MaxLen){ a="0"+a; } } if(a.compareTo(b)<0){ String temp=a; a=b; b=temp; } String str = ""; int JW = 0; // 借位 for (int i = MaxLen - 1; i >= 0; i--) { int tempA = a.charAt(i)-'0'; int tempB = b.charAt(i)-'0'; int temp; if (tempA - JW - tempB < 0 && i != 0) { temp = tempA + 10 - JW - tempB; JW = 1; } else { temp = tempA - JW - tempB; JW = 0; } str = temp + str; } while(str.length()>1&&str.charAt(0)=='0'){ str=str.substring(1); } return str; } private String absMulti(String a,String b){ String result="0"; if(a.equals("0")||b.equals("0")) return "0"; for(int i = b.length()-1; i >=0; i--){ int plustimes=b.charAt(i)-'0'; String atemp=a; for(int j=1;j<=b.length()-1-i;j++){ atemp=atemp+"0"; } for(int m=1;m<=plustimes;m++){ result=absAdd(result,atemp); } } return result; } private String absDiv(String a,String b){ if(a.equals("0")||b.equals("0")) return "0"; String result=""; String dealnum=""; String left=""; for(int index=0;index<a.length();index++){ dealnum=left+a.substring(index,index+1); while(left.length()>1&&left.charAt(0)=='0'){ left=left.substring(1); } while(dealnum.length()>1&&dealnum.charAt(0)=='0'){ dealnum=dealnum.substring(1); } if(compare(dealnum,b)<0){ result+="0"; left=dealnum; continue; }else if(compare(dealnum,b)==0){ result+="1"; left="0"; }else{ for(int i=9;i>=0;i--){ String s=absMulti(String.valueOf(i),b); if(compare(s,dealnum)>0){ continue; }else if(compare(s,dealnum)==0){ result+=String.valueOf(i); left="0"; break; }else{ result+=String.valueOf(i); left=absSub(s,dealnum); break; } } } } while(result.length()>1&&result.charAt(0)=='0'){ result=result.substring(1); } return result; } private String absMod(String a,String b){ if(a.equals("0")||b.equals("0")) return "0"; @SuppressWarnings("unused") String result=""; String dealnum=""; String left=""; for(int index=0;index<a.length();index++){ dealnum=left+a.substring(index,index+1); while(left.length()>1&&left.charAt(0)=='0'){ left=left.substring(1); } while(dealnum.length()>1&&dealnum.charAt(0)=='0'){ dealnum=dealnum.substring(1); } if(compare(dealnum,b)<0){ result+="0"; left=dealnum; continue; }else if(compare(dealnum,b)==0){ result+="1"; left="0"; }else{ for(int i=9;i>=0;i--){ String s=absMulti(String.valueOf(i),b); if(compare(s,dealnum)>0){ continue; }else if(compare(s,dealnum)==0){ result+=String.valueOf(i); left="0"; break; }else{ result+=String.valueOf(i); left=absSub(s,dealnum); break; } } } } while(left.length()>1&&left.charAt(0)=='0'){ left=left.substring(1); } return left; } public String toString(){ if(this.number.equals("0")){ return this.number; } String str=this.isPositive?"":"-"; str=str+this.number; return str; } public String getString() { String str = null; BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); try { str = buf.readLine(); }catch(IOException e) { e.printStackTrace(); } return str; } public void Operator() { System.out.println("输入enter开始"); while(true) { String str1 = "#"; String reg="^-?[0-9]\\d*$"; String temp = this.getString(); System.out.println("输入第一个数字"); String a = this.getString(); if(str1.equals(a)) { System.out.println("结束!!!"); break; } if(!a.matches(reg)){ System.out.println("非整数字串!"); continue; } System.out.println("输入第二个数字"); String b = this.getString(); if(str1.equals(b)) { System.out.println("结束!!!"); break; } if(!b.matches(reg)){ System.out.println("非整数字串!"); continue; } Test1 bigintA=new Test1(a); Test1 bigintB=new Test1(b); Test1 result=bigintA.add(bigintB); System.out.println("加法结果:"+result.toString()); Test1 result1=bigintA.sub(bigintB); System.out.println("减法结果:"+result1.toString()); Test1 result3=bigintA.multi(bigintB); System.out.println("乘法结果:"+result3.toString()); Test1 result4=bigintA.div(bigintB); System.out.println("除法结果:"+result4.toString()); } } public static void main(String[] args) { new Test1().Operator(); } }
java遇到个算术运算符的问题求指点
System.out.println(10 / 3.0); 这行代码输出的是3.3333333333333335 我知道有两个知识点: 1.整数和小数进行运算的时候,整数的类型自动提升为double类型,两个double类型进行相除运算,结果得到小数(也就是3.3333333333333335),即10先自动提升为double类型,再和3.0进行除法运算 2./获取的是除法操作的商,%获取的是除法操作的余数 而我的问题是:这行代码怎么算到是3.3333333333333335? 不知道这么想对不对:按照我们平时的计算法则,10除以3的商是3,余数是1,但是10变成double和同样是double类型的3.0进行除法运算就涉及到二进制除法了,先把double这个8字节的数据类型展开成32个二进制位,然后进行二进制的除法计算得到补码,然后补码倒推出源码,把商提取出来
【求助】 学习作业,求大佬帮忙看看???
写个程序,来计算表达式的值。比如计算3+1*4、(7+4)*3、3^2+4等这些式子,显然它们等于7、33、13 你需要处理+、-、*、/、^,分别代表加、减、乘、除、幂,都是双目运算符,同时表达式中还包含括号()。 注意运算符的优先顺序,先计算括号里的式子,幂运算符优先级最高,其次乘除运算优先级相同,最后是加减运算。同一优先级的运算符按照从左到右顺序计算。 川农牛觉得这还不简单嘛,分分钟用Java给他写了个出来。 Input 输入一个不带空格的字符串(长度不超过10000),代表需要计算值的表达式。表达式中只有正整数,除法也请参照正整数除法比如3/2应该等于1。 输入的字符串保证是一个合法的表达式。 Output 输出计算出的值,注意这个值有可能会非常非常大。如果表达式中出现了除0错误,直接输出ERROR
问问大佬 我的代码有哪里不对 作业过不了 希望大佬能指点下 万分感谢
题目内容: 由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就需要自己设计实现方法。 (0,1)之间的任何浮点数都可以表达为两个正整数的商,为了表达这样两个数的商,可以将相除的结果以多个整数来表示,每个整数表示结果的一位。即商的第一位用一个整数来表示,第二位用另一个整数来表示,以此类推,就可以输出一个高精度的除法结果了。 如16/19的结果0.8421052631...就可以依次输出8、4、2、1、0、5、2、6、3、1...。 #include <stdio.h> int main(void) { int a,b; int i=0; int shang,yushu; scanf("%d/%d",&a,&b); printf("0."); shang=a*10/b; yushu=a*10%b; printf("%d",shang); for(i=0;i<200 && yushu!=0;i++){ shang=yushu*10/b; yushu=yushu*10%b; printf("%d",shang); } return 0; }
c语言 计算高精度浮点数 请问两段代码有什么不同?为什么其中一个会提示浮点错误?
题目内容: 由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就需要自己设计实现方法。 (0,1)之间的任何浮点数都可以表达为两个正整数的商,为了表达这样两个数的商,可以将相除的结果以多个整数来表示,每个整数表示结果的一位。即商的第一位用一个整数来表示,第二位用另一个整数来表示,以此类推,就可以输出一个高精度的除法结果了。 如16/19的结果0.8421052631...就可以依次输出8、4、2、1、0、5、2、6、3、1...。 而除法的过程,则可以模仿人工列竖式做除法的方式,先将被除数乘以10,得到一位商以后,将余数乘以10作为下一轮计算的被除数: 160/19->8余8 80/19->4余4 ... 当某次余数为0时,则表明除尽。 现在,请写一个程序,输入一个分数,计算出它的小数形式。无论是否可以除尽,输出最多小数点后200位。 输入格式: 形如 a/b 的两个数,其中10<=a<b<100。也就是说,这个小数一定是小于1的正数。 输出格式: 形如 0.xxxxxxxxx 的小数,小数点后最多200位。输出结束的时候要带着回车换行。如果a/b是一个有限不循环小数,则输出完所有的有效位就可以了,不需要再输出后面的0来凑满200位。 输入样例: 16/19 输出样例: 0.84210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684 #include <stdio.h> int main() { int a,b,i,shang,yu; scanf("%d %d", &a, &b); printf("0."); for (i=0;i<200;i++) { shang = (a*10)/b; yu = a*10%b; printf("%d",shang); a = yu; if (a==0) { printf("\n"); goto out; } } printf("\n"); out: return 0; } #include <stdio.h> int main(int argc, char const *argv[]) { int n,m,i=1,b=1; scanf("%d/%d",&n,&m); printf("0."); while(b){ n*=10; int d = n/m; n = n%m; printf("%d", d); if(n==0){b=0;} i++; if(i>200){ b=0; } } return 0; } --------------------- 版权声明:本文为CSDN博主「小楫轻舟丶」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/lioldamon/article/details/78309405
我的输入1200有问题,不知道哪里有问题
数位拆分v2.0 从键盘上输入一个4位数的整数n,编写程序将其拆分为两个2位数的整数a和b,计算并输出拆分后的两个数的加、减、乘、除和求余运算的结果。例如n=-4321,设拆分后的两个整数为a,b,则a=-43,b=-21。除法运算结果要求精确到小数点后2位。求余和除法运算需要考虑除数为0的情况,即如果拆分后b=0,则输出提示信息"the second operater is zero!" 程序的运行结果示例1: please input n: 1200↙ 12,0 sum=12,sub=12,multi=0 the second operater is zero! 程序的运行结果示例2: please input n: -2304↙ -23,-4 sum=-27,sub=-19,multi=92 dev=5.75,mod=-3 输入格式: "%d" 输入提示信息:"please input n:\n" 拆分后的两个整数的输出格式:"%d,%d\n" 加法、减法、乘法的输出格式:"sum=%d,sub=%d,multi=%d\n" 除法和求余的输出格式:"dev=%.2f,mod=%d\n" 除数为0的提示信息:"the second operater is zero!\n" _** #include <stdio.h> #include <math.h> int main() { int x,y,z,q,i,a,b; float n,k,l; printf("please input n:\n"); scanf("%d",&x); y=x/100; z=x%100; printf("%d,%d\n",y,z); a=y+z; b=y-z; i=y*z; k=y;l=z; n=k/l; q=y%z; printf("sum=%d,sub=%d,multi=%d\n",a,b,i); if(z==0) printf("the second operater is zero!\n"); else printf("dev=%.2f,mod=%d\n",n,q); } _**
PAT乙级1034,codeblocks上运行正确,但提交答案错误
我写了一段比较长的代码,在codeblocks运行显示的答案和输出样例的答案是一样的,但提交后显示答案错误,没有超时,求大神解释!(虽然思路比较繁琐,但结构尚且清晰……) ``` #include<stdio.h> #include<string.h> #include<stdlib.h> long gcd(long a,long b); void toform(long * num, long a, long b);//该函数把分数变为输出的标准形式,放在long数组里面, //即整数部分和最简分数部分,一共三个值 int check(long * input);//根据标准形式决定用哪种格式输出--二维数组forms中的八种情况 long * add(long a, long b, long c, long d, long *temp);//加法,返回结果的标准形式 long * sub(long a, long b, long c, long d, long *temp);//减法 long * mul(long a, long b, long c, long d, long *temp);//乘法 long * divv(long a, long b, long c, long d, long *temp);//除法 void PRINT(int mark, long * input, char forms[][20]);//输出函数 int main() { long inputa[5],inputb[5]; int marka=-1, markb=-1,markr=-1;//该标志位决定用哪种格式输出 long a,b,c,d; char forms[8][20]={"(-%ld %ld/%ld)","(-%ld)","(-%ld/%ld)", "%ld %ld/%ld","%ld/%ld","0","%ld","Inf"};//存放输出的八种格式,通过 //marka,markb,markr的值来访问 long result[5]; long * arrayin[3]; arrayin[0]=inputa; arrayin[1]=inputb; arrayin[2]=result; scanf("%ld/%ld %ld/%ld",&a,&b,&c,&d); toform(inputa,a,b); toform(inputb,c,d); marka=check(inputa);//分别设置输入的两个有理数的输出格式 markb=check(inputb); markr=check(add(a,b,c,d,result));//加法输出 PRINT(marka,inputa,forms); printf(" + "); PRINT(markb,inputb,forms); printf(" = "); PRINT(markr,result,forms); printf("\n"); markr=check(sub(a,b,c,d,result));//减法输出 PRINT(marka,inputa,forms); printf(" - "); PRINT(markb,inputb,forms); printf(" = "); PRINT(markr,result,forms); printf("\n"); markr=check(mul(a,b,c,d,result));//乘法输出 PRINT(marka,inputa,forms); printf(" * "); PRINT(markb,inputb,forms); printf(" = "); PRINT(markr,result,forms); printf("\n"); markr=check(divv(a,b,c,d,result));//除法输出 PRINT(marka,inputa,forms); printf(" / "); PRINT(markb,inputb,forms); printf(" = "); PRINT(markr,result,forms); return 0; } void toform(long * num, long a, long b) { long ys; ys=gcd((long)abs(a%b),(long)abs(b));//求最大公约数 num[0]=a/b; num[1]=(a%b)/ys; num[2]=b/ys; } int check(long * input)//决定哪种格式输出,返回值作为访问forms的下标 { if(input[4]){ if(input[0]<0) { if(input[1]==0) return 1; else return 0; } else if(input[0]>0) { if(input[1]==0) return 6; else return 3; } else { if(input[1]>0) return 4; else if(input[1]<0) return 2; else return 5; } } else return 7; } long * add(long a,long b,long c,long d, long *temp) { long num1,num2; num1=a*d+b*c; num2=b*d; toform(temp,num1,num2); temp[4]=1;//除数是否为零标志位,每次输出时检测,若为0,直接输出"Inf", return temp; } long * sub(long a,long b,long c,long d, long *temp) { long num1,num2; num1=a*d-b*c; num2=b*d; toform(temp,num1,num2); temp[4]=1;//除数是否为零标志位,每次输出时检测,若为0,直接输出"Inf", return temp; } long * mul(long a,long b,long c,long d, long *temp) { long num1,num2; num1=a*c; num2=b*d; toform(temp,num1,num2); temp[4]=1;//除数是否为零标志位,每次输出时检测,若为0,直接输出"Inf", return temp; } long * divv(long a,long b,long c,long d, long *temp) { long num1,num2; if(c==0) { temp[4]=0; return temp; } else { if(c<0)//计算除法要把除数倒过来,而只能是分子是负数,所以要把分子、分母换一下号 { c=-c; d=-d; } num1=a*d; num2=b*c; toform(temp,num1,num2); temp[4]=1;//除数是否为零标志位,每次输出时检测,若为0,直接输出"Inf", } return temp; } void PRINT(int mark, long * input, char forms[][20]) { switch(mark) { case 0: printf(forms[0],(long)abs(input[0]),(long)abs(input[1]),(long)abs(input[2])); break; case 1: printf(forms[1],(long)abs(input[0])); break; case 2: printf(forms[2],(long)abs(input[1]),(long)abs(input[2])); break; case 3: printf(forms[3],(long)abs(input[0]),(long)abs(input[1]),(long)abs(input[2])); break; case 4: printf(forms[4],(long)abs(input[1]),(long)abs(input[2])); break; case 5: printf(forms[5]); break; case 6: printf(forms[6],(long)abs(input[0])); break; case 7: printf(forms[7]); break; } } long gcd(long a,long b)//求最大公约数 { if(a%b==0) return b; else; return gcd(b,a%b); } ```
算术表达式求值 堆栈与队列的应用
出题给小学生做,每次考试的题数可以设定,随机产生n个题目,将题目及标准答案写入文件中;题目涉及加减乘除,带括弧的混合运算;根据答题情况给出分数;将学生的学号,每道题的答案,分数也写入文件中,即每个学生的考试情况放在一个文件中保存。 一个算式的求值:求一个可能包含加、减、乘、除运算的中缀表达式的值。在计算机中,我们常用栈来解决这一问题。首先将中缀表达式转换到后缀表达式,然后对后缀表达式求值。加、减、乘、除分别用+,-,*, /,来表示。表达式可以有圆括号()。每个表达式中,圆括号、运算符和运算数相互之间都用空格分隔,运算数是整数,考虑除数为0的情况,除法的商向下取整。
关于201903-2,我样例能通过,但是只有30分,谁能帮忙想出不能通过的特殊样例?
题目背景】 二十四点是一款著名的纸牌游戏,其游戏的目标是使用 3 个加减乘除运算使得 4 张纸牌上数字的运算结果为 24。 【题目描述】 定义每一个游戏由 4 个从 1-9 的数字和 3 个四则运算符组成,保证四则运算符将 数字两两隔开,不存在括号和其他字符,运算顺序按照四则运算顺序进行。其中加法用 符号 + 表示,减法用符号 - 表示,乘法用小写字母 x 表示,除法用符号 / 表示。在游 戏里除法为整除,例如 2 / 3 = 0, 3 / 2 = 1, 4 / 2 = 2。 老师给了你 n 个游戏的解,请你编写程序验证每个游戏的结果是否为 24 。 【输入格式】 从标准输入读入数据。 第一行输入一个整数 n,从第 2 行开始到第 n + 1 行中,每一行包含一个长度为 7 的字符串,为上述的 24 点游戏,保证数据格式合法。 【输出格式】 输出到标准输出。 包含 n 行,对于每一个游戏,如果其结果为 24 则输出字符串 Yes,否则输出字符 串 No。 【样例 1 输入】 10 9+3+4x3 5+4x5x5 7-9-9+8 5x6/5x4 3+5+7+9 1x1+9-9 1x9-5/9 8/5+6x9 6x7-3x6 6x4+4/5 【样例 1 输出】 Yes No No Yes Yes No No No Yes Yes 【样例 1 解释】 9 + 3 + 4 × 3 = 24 5 + 4 × 5 × 5 = 105 7 - 9 - 9 + 8 = -3 5 × 6/5 × 4 = 24 3 + 5 + 7 + 9 = 24 1 × 1 + 9 - 9 = 1 1 × 9 - 5/9 = 9 8/5 + 6 × 9 = 55 6 × 7 - 3 × 6 = 24 6 × 4 + 4/5 = 24 ``` import java.util.*; public class Test201903_2 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); Stack<String> num=new Stack<String>(); Stack<String> symbol=new Stack<String>(); int n=sc.nextInt(); String YN=""; sc.nextLine(); for(int i=0;i<n;i++) { String str=sc.nextLine(); int result=0; num.push(str.charAt(0)+""); for(int t=0;t<5;t+=2) { if(str.charAt(t+1)=='x'||str.charAt(t+1)=='X') { int b1=Integer.valueOf((String) num.pop()); int b2=str.charAt(t+2)-'0'; int a=b1*b2; result=a; num.push(""+a); }else if (str.charAt(t+1)=='/') { int b1=Integer.valueOf((String) num.pop()); int b2=str.charAt(t+2)-'0'; int a=b1/b2; result=a; num.push(""+a); }else { symbol.push(str.charAt(t+1)+""); num.push(str.charAt(t+2)+""); } } while(!symbol.isEmpty()) { if(((String)symbol.pop()).equals("+")) { result=Integer.valueOf((String)num.pop()); int b2=Integer.valueOf((String)num.pop()); result+=b2; num.push(result+""); }else { result=Integer.valueOf((String)num.pop()); int b2=Integer.valueOf((String)num.pop()); result=-result+b2; num.push(result+""); } } num.clear(); symbol.clear(); if(result!=24) { YN+="No\n"; }else { YN+="Yes\n"; } } System.out.println(YN); } } ```
谁能教我算数表达式求值怎么编译
[问题描述] 出题给小学生做,每次考试的题数可以设定,随机产生n个题目,将题目及标准答案写入文件中;题目涉及加减乘除,带括弧的混合运算;根据答题情况给出分数;将学生的学号,每道题的答案,分数也写入文件中,即每个学生的考试情况放在一个文件中保存。 一个算式的求值:求一个可能包含加、减、乘、除运算的中缀表达式的值。在计算机中,我们常用栈来解决这一问题。首先将中缀表达式转换到后缀表达式,然后对后缀表达式求值。加、减、乘、除分别用+,-,*, /,来表示。表达式可以有圆括号()。每个表达式中,圆括号、运算符和运算数相互之间都用空格分隔,运算数是整数,考虑除数为0的情况,除法的商向下取整。
数据结构 函数指针
实现计算器的加法、减法、乘法和除法。使用一个命令行参数为您的选择,和2个数字。你使用下面的数组来赋值操作符函数。 int add(int x, int y); int sub(int x, int y); int mul(int x, int y); int div(int x, int y); int (*pf[4])(int, int) = { add, sub, mul, div }; ![图片说明](https://img-ask.csdn.net/upload/201603/05/1457163631_290050.png) 数据结构:函数指针数组 输入:选择运营商的数量(1,2,3,或4), 操作数的2个整数 输出:操作结果
float问题 求大神解答
我在Android开发中使用github上的MPAndroidChart时,在y轴添加数据时,它需要的是float型的值,如果按照演示的情况,添加了3个值分别是 10f 60f 30f 而我从数据库中调用的数据,求和后 进行每个数据除以和 即求出每个数据的百分比 进行除法以后 就不行了? 求解 float做了除法以后,怎么让他变成整数,像例子上面的那样? 谢谢大神,小白没币了,见谅~ 这是演示代码的数据private float[] y = { 10f, 60f, 30f }; 这是我的数据 float quarterly = ((float) (fee_type.get(("a" + i)) / resultIncome)) * 100; yValues.add(new Entry(quarterly, i - 1)); 这是log中我显示的除法结果 我感觉是这里出问题的 捕捉的数据是这样的 11-21 18:32:02.785 19211-19211/com.chase.cn.demon D/info5: == 7.534247 11-21 18:32:02.785 19211-19211/com.chase.cn.demon D/info5: == 7.534247 11-21 18:32:02.785 19211-19211/com.chase.cn.demon D/info5: == 7.534247 11-21 18:32:02.785 19211-19211/com.chase.cn.demon D/info5: == 15.068494 11-21 18:32:02.785 19211-19211/com.chase.cn.demon D/info5: == 7.534247 11-21 18:32:02.785 19211-19211/com.chase.cn.demon D/info5: == 22.602741 11-21 18:32:02.785 19211-19211/com.chase.cn.demon D/info5: == 7.534247 11-21 18:32:02.785 19211-19211/com.chase.cn.demon D/info5: == 30.136988
谁能教教我怎么编写这个程序
出题给小学生做,每次考试的题数可以设定,随机产生n个题目,将题目及标准答案写入文件中;题目涉及加减乘除,带括弧的混合运算;根据答题情况给出分数;将学生的学号,每道题的答案,分数也写入文件中,即每个学生的考试情况放在一个文件中保存。 一个算式的求值:求一个可能包含加、减、乘、除运算的中缀表达式的值。在计算机中,我们常用栈来解决这一问题。首先将中缀表达式转换到后缀表达式,然后对后缀表达式求值。加、减、乘、除分别用+,-,*, /,来表示。表达式可以有圆括号()。每个表达式中,圆括号、运算符和运算数相互之间都用空格分隔,运算数是整数,考虑除数为0的情况,除法的商向下取整。 [测试数据] 2 * 5 + 6 * ( 7 - 8 ) + 6 输出结果为10 [实现提示] (1)在程序中会用到两类栈:操作数栈和运算符栈,分别为整型数据和字符型数据,设置运算符栈和操作数栈辅助分析算符优先关系; (2) 在读入字符序列时,完成运算符和操作数的处理,以及相应运算; (3) 算符之间的优先关系可参考数据结构教材 。
实习作业不会做求指点
1.算术表达式求值 [问题描述] 出题给小学生做,每次考试的题数可以设定,随机产生n个题目,将题目及标准答案写入文件中;题目涉及加减乘除,带括弧的混合运算;根据答题情况给出分数;将学生的学号,每道题的答案,分数也写入文件中,即每个学生的考试情况放在一个文件中保存。 一个算式的求值:求一个可能包含加、减、乘、除运算的中缀表达式的值。在计算机中,我们常用栈来解决这一问题。首先将中缀表达式转换到后缀表达式,然后对后缀表达式求值。加、减、乘、除分别用+,-,*, /,来表示。表达式可以有圆括号()。每个表达式中,圆括号、运算符和运算数相互之间都用空格分隔,运算数是整数,考虑除数为0的情况,除法的商向下取整。 [测试数据] 2 * 5 + 6 * ( 7 - 8 ) + 6 输出结果为10 [实现提示] (1)在程序中会用到两类栈:操作数栈和运算符栈,分别为整型数据和字符型数据,设置运算符栈和操作数栈辅助分析算符优先关系; (2) 在读入字符序列时,完成运算符和操作数的处理,以及相应运算; (3) 算符之间的优先关系可参考数据结构教材 。
求大神帮忙注释c++代码。高精度计算器。
最近在学习制作高精度计算器,前辈给了我一段参考代码,但是我对其中有一部分还是不太懂。 【计算器要求】 实现两个高精度大整数(200位以内的整数)的四则运算,输出这两个大整数的和、差、积、商及余数。 · 请大神如果有空,帮我对几个运算符号代码(主程序不需要)进行注释!越详细越好!十分感谢! · 如果寻找到可优化的部分或者bug也请进行修改并标注,谢谢! ``` #include <iostream> #include <string> using namespace std; inline int compare(string str1, string str2) { if(str1.size() > str2.size()) //长度长的整数大于长度小的整数 return 1; else if(str1.size() < str2.size()) return -1; else return str1.compare(str2); //若长度相等,从头到尾按位比较,compare函数:相等返回0,大于返回1,小于返回-1 } string ADD_INT(string str1, string str2) {//高精度加法 string SUB_INT(string str1, string str2); int sign = 1; //sign 为符号位 string str; if(str1[0] == '-') { if(str2[0] == '-') { sign = -1; str = ADD_INT(str1.erase(0, 1), str2.erase(0, 1)); } else { str = SUB_INT(str2, str1.erase(0, 1)); } } else { if(str2[0] == '-') str = SUB_INT(str1, str2.erase(0, 1)); else { //把两个整数对齐,短整数前面加0补齐 string::size_type l1, l2; int i; l1 = str1.size(); l2 = str2.size(); if(l1 < l2) { for(i = 1; i <= l2 - l1; i++) str1 = "0" + str1; } else { for(i = 1; i <= l1 - l2; i++) str2 = "0" + str2; } int int1 = 0, int2 = 0; //int2 记录进位 for(i = str1.size() - 1; i >= 0; i--) { int1 = (int(str1[i]) - '0' + int(str2[i]) - '0' + int2) % 10; int2 = (int(str1[i]) - '0' + int(str2[i]) - '0' +int2) / 10; str = char(int1 + '0') + str; } if(int2 != 0) str = char(int2 + '0') + str; } } //运算后处理符号位 if((sign == -1) && (str[0] != '0')) str = "-" + str; return str; } string SUB_INT(string str1, string str2) {//高精度减法 string MUL_INT(string str1, string str2); int sign = 1; //sign 为符号位 string str; int i; if(str2[0] == '-') str = ADD_INT(str1, str2.erase(0, 1)); else { int res = compare(str1, str2); if(res == 0) return "0"; if(res < 0) { sign = -1; string temp = str1; str1 = str2; str2 = temp; } string::size_type tempint; tempint = str1.size() - str2.size(); for(i = str2.size() - 1; i >= 0; i--) { if(str1[i + tempint] < str2[i]) { str1[i + tempint - 1] = char(int(str1[i + tempint - 1]) - 1); str = char(str1[i + tempint] - str2[i] + ':') + str; } else str = char(str1[i + tempint] - str2[i] + '0') + str; } for(i = tempint - 1; i >= 0; i--) str = str1[i] + str; } //去除结果中多余的前导0 str.erase(0, str.find_first_not_of('0')); if(str.empty()) str = "0"; if((sign == -1) && (str[0] != '0')) str = "-" + str; return str; } string MUL_INT(string str1, string str2) {//高精度乘法 int sign = 1; //sign 为符号位 string str; if(str1[0] == '-') { sign *= -1; str1 = str1.erase(0, 1); } if(str2[0] == '-') { sign *= -1; str2 = str2.erase(0, 1); } int i, j; string::size_type l1, l2; l1 = str1.size(); l2 = str2.size(); for(i = l2 - 1; i >= 0; i --) { //实现手工乘法 string tempstr; int int1 = 0, int2 = 0, int3 = int(str2[i]) - '0'; if(int3 != 0) { for(j = 1; j <= (int)(l2 - 1 - i); j++) tempstr = "0" + tempstr; for(j = l1 - 1; j >= 0; j--) { int1 = (int3 * (int(str1[j]) - '0') + int2) % 10; int2 = (int3 * (int(str1[j]) - '0') + int2) / 10; tempstr = char(int1 + '0') + tempstr; } if(int2 != 0) tempstr = char(int2 + '0') + tempstr; } str = ADD_INT(str, tempstr); } //去除结果中的前导0 str.erase(0, str.find_first_not_of('0')); if(str.empty()) str = "0"; if((sign == -1) && (str[0] != '0')) str = "-" + str; return str; } string DIVIDE_INT(string str1, string str2, int flag) {//高精度除法 //flag = 1时,返回商; flag = 0时,返回余数 string quotient, residue; //定义商和余数 int sign1 = 1, sign2 = 1; if(str2 == "0") { //判断除数是否为0 quotient = "ERROR!"; residue = "ERROR!"; if(flag == 1) return quotient; else return residue; } if(str1 == "0") { //判断被除数是否为0 quotient = "0"; residue = "0"; } if(str1[0] == '-') { str1 = str1.erase(0, 1); sign1 *= -1; sign2 = -1; } if(str2[0] == '-') { str2 = str2.erase(0, 1); sign1 *= -1; } int res = compare(str1, str2); if(res < 0) { quotient = "0"; residue = str1; } else if(res == 0) { quotient = "1"; residue = "0"; } else { string::size_type l1, l2; l1 = str1.size(); l2 = str2.size(); string tempstr; tempstr.append(str1, 0, l2 - 1); //模拟手工除法 for(int i = l2 - 1; i < l1; i++) { tempstr = tempstr + str1[i]; for(char ch = '9'; ch >= '0'; ch --) { //试商 string str; str = str + ch; if(compare(MUL_INT(str2, str), tempstr) <= 0) { quotient = quotient + ch; tempstr = SUB_INT(tempstr, MUL_INT(str2, str)); break; } } } residue = tempstr; } //去除结果中的前导0 quotient.erase(0, quotient.find_first_not_of('0')); if(quotient.empty()) quotient = "0"; if((sign1 == -1) && (quotient[0] != '0')) quotient = "-" + quotient; if((sign2 == -1) && (residue[0] != '0')) residue = "-" + residue; if(flag == 1) return quotient; else return residue; } string DIV_INT(string str1, string str2) {//高精度除法,返回商 return DIVIDE_INT(str1, str2, 1); } string MOD_INT(string str1, string str2) {//高精度除法,返回余数 return DIVIDE_INT(str1, str2, 0); } int main() { char ch; string s1, s2, res; cout<<"请输入 丨 加法:“+ ” 丨 减法:“- ” 丨 乘法:“* ” 丨 除法:“/ ” 丨 余数:“% ”丨来确定计算类型!" <<endl; while(cin >> ch) { cout<<"请输入要计算的数1:" <<endl; cin >> s1; cout<<"请输入要计算的数2:" <<endl; cin >> s2; switch(ch) { case '+': res = "加法计算的结果是:"+ADD_INT(s1, s2); break; case '-': res = "减法计算的结果是:"+SUB_INT(s1, s2); break; case '*': res = "乘法计算的结果是:"+MUL_INT(s1, s2); break; case '/': res = "除法计算的结果是:"+DIV_INT(s1, s2); break; case '%': res = "除法计算后的余数是:"+MOD_INT(s1, s2); break; default : break; } cout << res << endl; } return(0); } ```
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
《阿里巴巴开发手册》读书笔记-编程规约
Java编程规约命名风格 命名风格 类名使用UpperCamelCase风格 方法名,参数名,成员变量,局部变量都统一使用lowerCamelcase风格 常量命名全部大写,单词间用下划线隔开, 力求语义表达完整清楚,不要嫌名字长 ...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
Python绘图,圣诞树,花,爱心 | Turtle篇
1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() circle.shape('circle') circle.color('red') circle.speed('fastest') circle.up() square = turtle.Turtle()
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
Linux 命令(122)—— watch 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] watch(1) manual
Linux 命令(121)—— cal 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] cal(1) manual
记jsp+servlet+jdbc实现的新闻管理系统
1.工具:eclipse+SQLyog 2.介绍:实现的内容就是显示新闻的基本信息,然后一个增删改查的操作。 3.数据库表设计 列名 中文名称 数据类型 长度 非空 newsId 文章ID int 11 √ newsTitle 文章标题 varchar 20 √ newsContent 文章内容 text newsStatus 是否审核 varchar 10 news...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告(本文) 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允
相关热词 c#导入fbx c#中屏蔽键盘某个键 c#正态概率密度 c#和数据库登陆界面设计 c# 高斯消去法 c# codedom c#读取cad文件文本 c# 控制全局鼠标移动 c# temp 目录 bytes初始化 c#
立即提问