网站开发的比较,网站开发的总结与展望,上海正规做网站公司报价,wordpress log文件每日C知识 system(color xx);是改变字体及背景颜色#xff0c;前一个x代表一个数字#xff0c;可以改变背景颜色#xff0c;后一个x代表一个数字#xff0c;可以改变字体颜色 #xff0c;但都是根据颜色表来的。
记住#xff1a;要加头文件#xff1a;#include知识 system(color xx);是改变字体及背景颜色前一个x代表一个数字可以改变背景颜色后一个x代表一个数字可以改变字体颜色 但都是根据颜色表来的。
记住要加头文件#includewindows.h 颜色对照表: 0 黑色 1 蓝色 2 绿色 3 湖蓝色 4 红色 5 紫色 6 黄色 7 白色 8 灰色 9 亮蓝色 A 亮绿色 B 亮湖蓝色 C 亮红色 D 亮紫色 E 亮黄色 F 亮白色 例子
#includebits/stdc.h
#includewindows.h
using namespace std;
int main(){system(color 01);cout1234567890; return 0;
}输出结果 高精度简介
在C中当你用int、long long甚至是unsigned long long 都无法处理的超级巨大数字你会感到无比痛苦甚至到绝望那么我们此时就只有一种方法了——高精度算法。我们可以利用程序设计的方法去实现这样的高精度计算。介绍常用的几种高精度计算的方法。本文主要实现的是自然数范围内做运算的 加法、减法、乘法、除法 四种基本高精度运算。
高精度High Precision是一种在计算机编程中用于表示和操作大数的技术。在C中可以使用高精度思想来处理大数例如质数、因数分解等。
1高精度加法所用到的算法很简单其实就是我们小学所学的加法“竖式”计算。将两个加数的对应数位对齐也就是说个位对个位、十位对十位、百位对百位对应的数位进行加法操作有进位的要进位。
2高精度加法要将两个加数按对应的位数一位一位地处理所以在实践中将两个加数分别用两个数组进行存储问题就会变得简单。
3之前我们已经说过C中最大的整数是long long型最大位数是20位。所以对于10000位的正整数我们输入的数据类型应该是一个字符串也就是string型的数据。
例题1洛谷P1303 A*B Problem
题目描述
给出两个非负整数求它们的乘积。
输入格式
输入共两行每行一个非负整数。
输出格式
输出一个非负整数表示乘积。
输入输出样例
输入 #1
1 2
输出 #1
2
说明/提示
每个非负整数不超过10的2000次方。
解题思路
在讲这道题之前我有必要先从高精度加/减法来引入一下。
高精度加减法最重要的是什么当然是对齐数位了那么为了达到这一点我们不惜要先将输入倒序存储高精乘也是这样。下面拿一张表格来示意一下高精度加法的运算过程
200561902339079
那么高精乘呢他们也需要判定位置关系只不过关系表达式用坐标表示是这样的a[i]*b[j]c[i,j]//乘数 * 乘数乘积。
AC
#includebits/stdc.h
using namespace std;
char a1[10001],b1[10001];
int a[10001],b[10001],i,x,len,j,c[10001];
int main ()
{cina1b1;int lenastrlen(a1);int lenbstrlen(b1);for(i1;ilena;i)a[i]a1[lena-i]-0;for(i1;ilenb;i)b[i]b1[lenb-i]-0;for(i1;ilenb;i)for(j1;jlena;j)c[ij-1]a[j]*b[i];for(i1;ilenalenb;i)if(c[i]9){c[i1]c[i]/10;c[i]%10;}lenlenalenb;while(c[len]0len1)len--;for(ilen;i1;i--)coutc[i];return 0;
}
例题2洛谷P1480 A/B Problem
题目描述
输入两个整数 a,b输出它们的商。
输入格式
两行第一行是被除数第二行是除数。
输出格式
一行商的整数部分。
输入输出样例
输入 #1
10 2
输出 #1
5
说明/提示
0≤a≤10的5000次方1≤b≤10的9次方。
解题思路
这是一道高精除低精模板题。
模拟竖式被除数的每一位加上余数除以被除数并更新余数的过程即可。
不过要注意一下在数 a 后面拼上一位数 b 是 10ab。
自己推一下竖式就可以理解了。
记得最后要去除前导零。
AC
#include iostream
using namespace std;
string a, res;
long b;
int main() {cin a b;long t 0;for (int i 0; i a.size(); i) {res.push_back((t * 10 a[i] - 0) / b 0);t (t * 10 a[i] - 0) % b;}int i 0;while (i 1 res.size() res[i] 0) i;cout res.substr(i) endl;
}例题3洛谷P1601 AB Problem
题目描述
高精度加法相当于 ab problem不用考虑负数。
输入格式
分两行输入。a,b≤10的500次方。
输出格式
输出只有一行代表 ab 的值。
输入输出样例
输入 #1
1 1
输出 #1
2
输入 #2
1001 9099
输出 #2
10100
说明/提示
20% 的测试数据0≤a,b≤10的9次方
40% 的测试数据0≤a,b≤10的18次方。
解题思路
AB高精度版其实是一道模板题在很多领域都有用处。
高精度算法属于处理大数字的数学计算方法。在一般的科学计算中会经常算到小数点后几百位或者更多当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数高精度算法是用计算机对于超大数据的一种模拟加减乘除乘方阶乘开方等运算。
AC
#includestdio.h
#includestring.h
#includealgorithm
using namespace std;
void add(char a[], char b[])
{//获取数组长度int alen strlen(a), blen strlen(b), t 0, i,len;// 翻转数组为了低位对齐reverse(a,aalen);reverse(b,bblen);// 存放·结果int c[502]{0};// 取较短的位len (alen blen) ? alen : blen;// 对应位相加for (i 0; i len; i){c[i]((a[i]b[i]-0-0)t);// t代表进位tc[i]/10;c[i]c[i]%10;}// 剩余位处理while (ialen){c[i]t(a[i]-0);tc[i]/10;c[i]c[i]%10;i;}while (iblen){c[i]t(b[i]-0);tc[i]/10;c[i]c[i]%10;i;}// 最高位进位if(t!0){c[i]t;i;}// 输出for(ii-1; i 0; i--) printf(%d, c[i]);
}
int main()
{char a[502]{0}, b[502]{0};scanf(%s %s, a, b);add(a,b);return 0;
}课后练习P1080 [NOIP2012 提高组] 国王游戏
题目描述
恰逢 H 国国庆国王邀请 n 位大臣来玩一个有奖游戏。首先他让每个大臣在左、右手上面分别写下一个整数国王自己也在左、右手上各写一个整数。然后让这 n 位大臣排成一排国王站在队伍的最前面。排好队后所有的大臣都会获得国王奖赏的若干金币每位大臣获得的金币数分别是排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数然后向下取整得到的结果。
国王不希望某一个大臣获得特别多的奖赏所以他想请你帮他重新安排一下队伍的顺序使得获得奖赏最多的大臣所获奖赏尽可能的少。注意国王的位置始终在队伍的最前面。
输入格式
第一行包含一个整数 n表示大臣的人数。
第二行包含两个整数 a 和 b之间用一个空格隔开分别表示国王左手和右手上的整数。
接下来 n 行每行包含两个整数 a 和 b之间用一个空格隔开分别表示每个大臣左手和右手上的整数。
输出格式
一个整数表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。
输入输出样例
输入 #1
3 1 1 2 3 7 4 4 6
输出 #1
2
说明/提示
【输入输出样例说明】
按 1、2、3 这样排列队伍获得奖赏最多的大臣所获得金币数为 2
按 1、3、2 这样排列队伍获得奖赏最多的大臣所获得金币数为2
按 2、1、3 这样排列队伍获得奖赏最多的大臣所获得金币数为 2
按2、3、1这样排列队伍获得奖赏最多的大臣所获得金币数为 9
按 3、1、2这样排列队伍获得奖赏最多的大臣所获得金币数为 2
按3、2、1 这样排列队伍获得奖赏最多的大臣所获得金币数为 9。
因此奖赏最多的大臣最少获得 2个金币答案输出2。
【数据范围】
对于 20%的数据有 1≤n≤10,0a,b8
对于 40%的数据有1≤n≤20,0a,b8
对于 60%的数据有 1≤n≤100
对于 60%的数据保证答案不超过 10的9次方
对于 100%的数据有 1≤n≤1,000,0a,b10000。
解题思路
其实懂了思想还是挺简单的朴素的高精度乘法和高精度除法但难想到的还是如何一开始给他们排序于是冥思苦想终于发现了如何排序好吧借鉴了别人的想法便是按a*b排序。
为什么呢我简单说明一下假设前面几个人都排好了我们要如何证明最后两个人谁排前面会对答案影响小一点呢也就是贡献得尽量小一点设前几个人a的乘积为x那么这两个人a1,b1和a2,b2谁排前一个结果就为x*a1/b2和x*a2/b1将他们做下比较易得出当a1*b1a2*b2时(a1,b1)排在前面更好【可以在草稿纸上列下不等式算下不难得出】然后就简单了
AC
#includebits/stdc.h
#define ll long long
#define ld long double
using namespace std;
string hmul(string a,string b){int c[500005];memset(c,0,sizeof c);int x[a.size()],y[b.size()];memset(x,0,sizeof x);memset(y,0,sizeof y);for(unsigned int i0;ia.size();i)x[a.size()-1-i]a[i]-0;for(unsigned int i0;ib.size();i)y[b.size()-i-1]b[i]-0;for(unsigned int i0;ia.size();i){for(unsigned j0;jb.size();j){c[ij]x[i]*y[j];}}for(unsigned int i0;ia.size()b.size();i){if(c[i]10){c[i1]c[i]/10;c[i]%10;}}string ci;bool p1;for(int ia.size()b.size()-1;i0;i--){if(c[i]0p) continue;else{p0;cic[i]0;}}return ci;
}
string hdiv(string a,int b){int x[50005];int y[50005];memset(x,0,sizeof(x));memset(y,0,sizeof(y));for(unsigned int i0;ia.size();i){x[i1]a[i]-0;}int yu0;for(unsigned int i1;ia.size();i){y[i](yu*10x[i])/b;yu(yu*10x[i])%b;}int kk1;while(y[kk]0kka.size()) kk;string aa;for(unsigned int ikk;ia.size();i){aay[i]0;}return aa;
}
string smx(string a,string b){if(a.size()!b.size()) return a.size()b.size()?a:b;return ab?a:b;
}
string tur_str(int num){string str;while(num){strnum%100;num/10;}reverse(str.begin(),str.end());return str;
}
int n;
struct aa{int l,r;
}a[100005];
bool cmp(aa a,aa b){return (a.l*a.r)(b.l*b.r);
}
int main(){cinn;cina[0].la[0].r;for(int i1;in;i) cina[i].la[i].r;sort(a1,an1,cmp);string ans0;string xxtur_str(a[0].l);for(int i1;in;i){anssmx(ans,hdiv(xx,a[i].r));//coutansansendl;xxhmul(xx,tur_str(a[i].l));}coutansendl;return 0;
}
结尾
希望大家多多关注
本篇文章共5996字如果你能支持一下我我十分感谢
如果有人想在洛谷上做题可以点下方链接
https://www.luogu.com.cn/
如果你喜欢或想了解一下其他的算法可以看看以下这些
题目详解系列部分
【万题详解】洛谷P1252 马拉松接力赛-CSDN博客
【万题详解】洛谷P1359 租用游艇-CSDN博客
【百题详解】洛谷P8508 做不完的作业-CSDN博客
【万题详解1】洛谷P1230 智力大冲浪-CSDN博客
【全网首发】洛谷贪心题解集合-CSDN博客
洛谷二分题集3题-CSDN博客
游戏系列
C史上最坑小游戏-CSDN博客 C自创小游戏-CSDN博客
C下雪-CSDN博客
C讲解系列算法
C:第十二讲DFS深搜二_c匿名函数dfs-CSDN博客 C第十一讲DFS深搜-CSDN博客
C第十讲二分查找-CSDN博客
前缀和与差分
C第九讲前缀和与差分-CSDN博客
贪心
C第八讲贪心算法1-CSDN博客
C讲解系列基础入门
排序
C第七讲冒泡排序-CSDN博客
函数
C第6讲max和min函数_c min函数-CSDN博客
C第五讲函数初步-CSDN博客
for循环数组
C第四讲for循环及数组-CSDN博客
if语句else语句及运算
C第三讲C中的逻辑运算符及if else语句-CSDN博客
基础
C第二讲输入与输出-CSDN博客
C第一讲认识C编译器-CSDN博客
欢迎收看希望大家能三连
最后认识一下我是爱编程的喷火龙廖我们有缘再见