因为大家都在卷自己的个人博客。
所以在测完核酸后做出了也临时做一个网站的决定。
于是找到了对这方面比较懂的初中同学。
向大佬借了个:
子域名x1
虚拟主机x1
还让佬在我睡觉的时候把WordPress给部署好了。
哭啊QAQ。
总而言之。
捏这个博客就是弄好了吧,虽然可以互动的地方非常有限(不如说基本没有?),页面的观感也非常差。
比不上用好几天时间研究的其他同学,比不上从源码敲起的虚叶前辈,更比不上耐心的初中同学,但是总归是自己写 给自己看的,也就不苛求精致的GUI了(让进来审查的老前辈不吐出来就是胜利)。以后也会在这里上传自己的学习进度,好好梳理一周的学习内容,得步而进步。
week1 周作业 模拟与高精度。
T1 乒乓球(模拟题)
没什么要注意的,坑点在比赛结束的条件:
双方比分差要 大于等于 2。
#include <iostream>
#include <cmath>
using namespace std;
int main(){
char a; char b[100005];
int win=0,lose=0,i=0;
while(cin>>a&&a!='E'){
i++; b[i]=a;
}
for(int k=1;k<=i;k++){
if(b[k]=='W') win++;
else lose++;
if((win>=11||lose>=11)&&abs(win-lose)>=2){
cout<<win<<":"<<lose<<endl;
win=0,lose=0;
}
}
cout<<win<<":"<<lose<<endl<<endl;
win=0,lose=0;
for(int k=1;k<=i;k++){
if(b[k]=='W') win++;
else lose++;
if((win>=21||lose>=21)&&abs(win-lose)>=2){
cout<<win<<":"<<lose<<endl;
win=0,lose=0;
}
}
cout<<win<<":"<<lose<<endl;
return 0;
}
可是为什么不写函数呢。)
T2 高精度A+B(高精度加法)
lds学长说高精度是非常基础的内容,于是我也就简单模拟了一下,并没有学习到这道题的精髓。
坑点:
① 以 char类型 存储的数字转化为 int类型 进行计算的时候要减去0的ascii码的值。
(char)number = (int)(number-'0');
② 要比较两个数的长度,在较短数前面不断加0直到两数长度相等后才可以模拟竖式相加。
下为过此题的代码,仅仅为了 解出这道题写的。
//高精度加法。
#include <bits/stdc++.h>
using namespace std;
int carry;
int str_add(char a,char b){
int _new = a+b-'0'-'0';
_new+=carry; carry = 0;
if(_new>9){
_new%=10;
carry++;
}
return _new+'0';//该return什么啊(恼。
}
int main(){
string a,b;
cin>>a>>b;
int l1=a.length(),l2=b.length();
int length=l1;
if(l1<l2){
length = l2;
for(int i=l1;i<l2;i++)
a="0"+a;
}
else if(l1>l2){
length = l1;
for(int i=l2;i<l1;i++)
b="0"+b;
}
for(int i=length-1;i>=0;i--){
b[i] = str_add(a[i],b[i]);
}
if(carry!=0){
cout<<"1";
}
for(int i=0;i<length;i++)
cout<<b[i];
return 0;
}
T3 高精度累加。(高精度乘法)
题目是给小于100位的整数n,求1+2+...+n的值。
也就是求(n+1)n/2 的值。
也就是要求模拟高精度乘法。
注意的是当位数为0的时候就可以直接不用计算这位数了。
然后模拟竖式乘法计算。
仍然只是为了做出这道题所以在输出的时候进行判断完成除2的操作。
非常愚蠢。)
#include <iostream>
#include <string>
using namespace std;
//加法操作。
string add_str(string a,string b){
string str="";
int len1 = a.length();
int len2 = b.length();
if(len1>len2){
for(int i = 1;i<=len1-len2;i++)
b="0"+b;
}
else{
for(int i=1;i<=len2-len1;i++)
a="0"+a;
}
len1=a.length();
int temp;
int carry = 0;
for(int i=len1-1;i>=0;i--){
temp = a[i]-'0'+b[i]-'0'+carry;
carry = temp/10;
temp%=10;
str=(char)(temp+'0')+str;
}
if(carry!=0) str=(char)(carry+'0')+str;
return str;
}
//乘法操作。(其中模拟了a每一位数与b相乘的结果并用了加法累加)
string mul_str(string a,string b){
string ans_str;
int len1=a.length();
int len2=b.length();
string tempstr;
for(int i = len1-1;i>=0;i--){
tempstr="";
int multi=a[i]-'0';
int carry = 0,temp=0;
if(multi!=0){
for(int k=1;k<=len1-1-i;k++){
tempstr+="0";
}
for(int l=len2-1;l>=0;l--){
temp = (multi*(b[l]-'0')+carry);
carry = temp/10;
temp %= 10;
tempstr = (char)(temp+'0')+tempstr;
}
if(carry!=0) tempstr = (char)(carry+'0')+tempstr;
}
ans_str=add_str(ans_str,tempstr);
}
return ans_str;
}
int main(){
string a;
cin>>a;
a = mul_str(a,add_str(a,"1"));
int len = a.length();
int carry=0;
for(int i=0;i<len;i++){
if(i==0&&a[i]-'0'==1){
carry = 1;
continue;
}
cout<<(carry*10+(a[i]-'0'))/2;
carry = (carry*10+(a[i]-'0'))%2;
}
return 0;
}
嗯,非常愚蠢。)
存在的问题:
①高精度除法还没试着写过TAT。
②经常会投机取巧 最后搬石砸脚。
再次谢谢(送)给我博客一隅的大佬了XwX
下为dalao个人页。)
白のblog – 向往技术力の彼方 (mashiro.pro)。
- 08/10/2024
- 29/09/2024
- 16/09/2024
- 15/09/2024
- 13/09/2024
- 12/09/2024
- 11/09/2024
- 10/09/2024
- 09/09/2024
- 07/09/2024
- 06/09/2024
- 05/09/2024
- 04/09/2024
- 03/09/2024
- 02/09/2024
- 26/08/2024
- 21/08/2024
- 10/08/2024
- 07/08/2024
- 05/08/2024
- 31/07/2024
- 20/07/2024
- 19/07/2024
- 16/07/2024
- 15/07/2024
- 13/07/2024
- 12/07/2024
- 11/07/2024
- 09/07/2024
- 08/07/2024
- 17/06/2024
- 06/05/2024
- 03/04/2024
- 06/02/2024
- 02/02/2024
- 31/01/2024
- 22/01/2024
- 20/01/2024
- 08/01/2024
- 06/11/2023
- 29/10/2023
- 14/05/2023
- 13/05/2023
- 12/05/2023
- 26/12/2022
- 12/12/2022
- 05/12/2022
- 21/11/2022
- 14/11/2022
- 06/11/2022
- 03/11/2022
- 29/10/2022