import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String A = in.next(); int B = in.nextInt(); StringBuilder Q = new StringBuilder(); int r = 0; for(int i = 0;i<A.length();i++){ int num = r*10+A.charAt(i)-'0'; int result = 0; if(num>=B||i+1==A.length()){ result = num/B; r = num%B; }else{ if(i!=0) Q.append(0); num = num*10+A.charAt(++i)-'0'; result = num/B; r = num%B; } Q.append(result); } System.out.println(Q.toString()+" "+r); } }
static void Main(string[] args) { string line = null; /*基本思想是把除法转换为求商过程的逆转,比如 100/2 等价于 1/2 商为0,余数为1,商为0的情况下不能输输出, 然后余数和下一位 即0 组合为1*10+0=10,就变成10/2 商为5余数为0,此时输出商数。然后0和下一位0组合为0*10+0=0 0/2余数为0, 此时运算完毕 */ while ((line = Console.ReadLine()) != null) { int quotient = 0;//商数 int remainder = 0;//余数 string[] tokens = line.Split(); string a = tokens[0]; int b = int.Parse(tokens[1]); for (int i = 0; i < a.Length; i++) { remainder = remainder * 10 + a[i] - 48; if (remainder >= b) { Console.Write(remainder / b); quotient = 1; } else if (quotient == 1) Console.Write(0); remainder = remainder % b; } if (quotient == 0) Console.Write(0); Console.Write(" " + remainder); } }
#include<iostream>#include<string>using namespace std;//PAT乙级真题A除以B (20)intmain(){string A,Q;intB,R;cin>>A>>B;intlength = A.length();//special case A<Bif(length==1&& (A[0]-'0')<B)cout<<"0 "<<A[0]-'0';//normal case caculate the divide by using the stringinti,tmp = A[0]-'0';if(tmp>B)//the first bitQ.push_back(tmp/B+'0');for(i=1;i<length;i++){R = tmp%B;tmp = R*10+(A[i]-'0');Q.push_back(tmp/B+'0');}R = tmp%B;cout<<Q<<" "<<R;}
#include<iostream> using namespace std; int main() { string s; cin>>s; int n; cin>>n; int len = s.size(); int t = 0; for(int i = 0; i < len; i++) { t = t*10 + s[i] - '0'; if(t >= n) { cout<<t/n; t = t-n*(t/n); } else if(i != 0) { cout<<"0"; } } cout<<" "<<t; }
#include<iostream> #include<string> using namespace std; int main(){ string stra; int b; cin >> stra >> b; int mode=0; for(int i=0;i<stra.size();i++){ //从高位到低位计算每一位除法所得结果 int temp = stra[i] - '0' + 10 * mode; //避免第一位所得为0 if(i==0 && temp/b == 0) mode = temp; else { cout << temp/b; mode = temp % b; } } cout << " " <<mode; return 0; }
#include<iostream> using namespace std; int main() { string a; int b; cin>>a>>b; int len=a.length(); //做除法是从高位开始计算 int t=0; string res; for(int i=0;i<len;i++){ int x=a[i]-'0'; t=t*10+x; if(i!=0||t/b!=0) res+=to_string(t/b); t%=b; } cout<<res<<" "<<t; return 0; }
0 R
;商的第一位为0不用输出。/* * app=PAT-Basic lang=c++ * https://pintia.cn/problem-sets/994805260223102976/problems/994805305181847552 */ #include <cstdio> #include <cstring> using namespace std; const int maxn = 1010; int A[maxn] = {}; int Q[maxn] = {}; int main() { int B, R = 0; char ch[1010]; scanf("%s%d",ch,&B); int len = strlen(ch); for (int i = 0; i < len; i++){ A[i] = ch[i] - '0'; } int j = 0; for (int i = 0; i < len; i++){ R *= 10; R += A[i]; Q[j++] = R / B; R %= B; } if (j == 1 && Q[j] == 0){ printf("0 %d",R); return 0; } bool flag = false; for (int i = 0; i < j; i++){ if (!flag && Q[i] == 0){ continue; } else{ printf("%d", Q[i]); flag = true; } } printf(" %d",R); return 0; }
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #pragma warning(disable:4996); #include <iostream> #include<stdio.h> #include<algorithm> #include<string.h> #include<stack> using namespace std; int main() { char a[1005]; int b; cin >> a >> b; int len = strlen(a); int c = 10;//权值; int ans = 0;//保存前一位留下的数,用作后面的除法 char q[1000]; int t = 0;//用来存放商 int x;//用来记录每次读取的数; if (strcmp(a, "0") == 0) cout << "0";//除数为0 for (int i = 0;i < len;i++) { x = a[i] - '0'; ans += x; if(i!=0||(i==0&& (ans/b)!=0)) q[t++] = (ans/b) + '0'; if (ans % b == 0) { ans = 0;continue; } else { ans = (ans % b) * c; } } for (int i = 0;i < t;i++) cout << q[i]; cout << " " << ans/c; return 0; }
//123456789050987654321 7 //17636684150141093474 3 #include<iostream> #include<sstream> #include<cstring> using namespace std; int main() { int k;//一位 int tmp; string s; string str; string chu=""; char yu; cin>>s;cin>>k; if(s.size()<=2) { stringstream ss; ss<<s; ss>>tmp; cout<<tmp/k<<tmp%k<<endl; return 0; } int i; if(s[0]<k+'0') { str=s.substr(0,2); i=2; } else { str=s[0]; i=1; } for(;i<=s.size();) { stringstream ss; ss<<str; ss>>tmp; chu+=(tmp/k)+'0'; yu=(tmp%k)+'0'; //cout<<yu<<endl; str=yu; str+=s[i]; i++; } cout<<chu<<' '<<yu<<endl; }
很坑的一点是,牛客的C++编译器不认识<String>头文件,只认识<string>头文件,导致提交错了两次。 #include <iostream> #include <string> using namespace std; int main(){ string dividends = " ", ans = ""; int divisor = 1, length = 0, subDividends = 0; int i = 0; cin >> dividends >> divisor; length = dividends.length(); int *array = new int[length]; for(i = 0;i < length;i++){ array[i] = dividends[i]-'0'; } int quotient = 0, remainder = 0; for(i = 0;i < length;i++){ subDividends = remainder*10 + array[i]; quotient = subDividends/divisor; if(!(i==0&"ient==0)) ans += quotient + '0'; remainder = subDividends%divisor; } cout << ans << " " << remainder <<endl; delete array; return 0; }
//用正常的手算步骤代码跑一遍就可以啦 #include<iostream> using namespace std; int main() { string A; int B,Y = 0;//Y为余数 cin >> A >> B; int temp = 10*(A[0]-'0')+(A[1]-'0');//先用前两位去除 for(int i = 0; i < A.size()-1; i++) { int S = temp/B;//S为商 Y = temp%B;//Y为余数 temp = 10*Y + (A[i+2]-'0');//temp看演算纸 cout << S; } cout << " " << Y; return 0; }
#coding=utf-8 s=raw_input() a,b=s.split(" ") b=int(b) ans=[] flag=0 for i in a: if (int(i)+flag*10)/int(b)<1: ans.append( str((flag*10+int(i))/b) ) #商0 flag=int(i) #print "1flag %d"%flag else: #print "2flag %s"%str((flag*10+int(i))/b) ans.append( str((flag*10+int(i))/b) ) flag = (flag*10+int(i))%b if ans[0]=="0": print "".join(ans)[1:] else: print "".join(ans) print flag
#include <iostream> #include <cstdio> #include <cstring> using namespace std; class BigNum { public: int number[1005]; int len; BigNum() { len = 0; memset(number, 0, sizeof(number)); } void in() { char t = '0'; while (t) { t = (char) getchar(); if (t == ' ' || t == '\n') break; number[len] = t - '0'; len++; } } void out() { bool flag = false; for (int i = 0; i < len; ++i) { if (number[i] != '0' && number[i] != 0)//从左边第一个不为0的数开始输出 flag = true; if (flag) printf("%d", number[i]); } } //返回余数 int chu(int num, BigNum &b) { int n, mod = 0; for (int i = 0; i < len; ++i) { n = number[i] + mod * 10; b.number[i] = n / num; mod = n % num; } b.len = len; return mod; } }; int main() { int n,q; BigNum a = BigNum(); BigNum b = BigNum(); a.in(); cin >> n; q = a.chu(n, b); b.out(); cout << " " << q; return 0; }
#include<iostream> #include<string> using namespace std; int main() { string a, c = ""; int b, temp, remain = 0; cin >> a >> b; for (int i = 0; i < a.size(); i++) { temp = int(a[i] - '0') + remain * 10; remain = temp % b; if (i == 0 && temp / b == 0) continue; c.append(1, char(temp / b + 48)); } cout << c << " " << remain << endl; return 0; }