2024年5月25日记录手记
TIME:18:16
开始写题了!
TIME:18:40
高精度一直写不出来
所以被打了
TIME:19:17
高精度终于AC了
但是
#include <bits/stdc++.h>
using namespace std;
const int N = 2010;
char a[N], b[N];
int a1[N], b1[N], c1[N];
void zh(char *s, int a[])
{
int len = strlen(s);
for(int i=0;i<len;i++)
{
a[len - 1 - i] = s[i] - '0';
}
}
void print(int s[])
{
int len = N-1;
while(s[len] == 0 && len >= 1)
{
len--;
}
//去除前导0
for(int i = len; i >= 0; i--)
{
cout << s[i];
}
}
int main()
{
scanf("%s%s",a, b);
//输入
zh(a, a1);
zh(b, b1);
//转换为int
for (int i=0; a1[i]; i++)
{
for (int j=0; b1[j]; j++)
{
c1[i+j] += a1[i]*b1[j];
//计算
}
}
for(int i = 0;i < N-1;i++)
{
c1[i+1] += c1[i] / 10;
c1[i] = c1[i] % 10;
}
//计算结果
print(c1);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 2010;
char s1[N], s2[N], tmp[N];
int a[N], b[N], c[N];
void change(char *s, int num[])
{
int len = strlen(s);
for(int i=0; i < len; i++)
{
num[len - 1 - i] = s[i] - '0';
}
}
void print(int num[])
{
int len = N-1;
while(len >= 1 && num[len] == 0) len--;
for(int i = len; i >= 0; i--) cout << num[i];
}
int main()
{
cin >> s1 >> s2;
change(s1, a);
change(s2 ,b);
for(int i=0;s1[i]; i++)
{
for(int j = 0;s2[j];j++)
{
c[i+j] += a[i] * b[j];
}
}
for(int i = 0;i < N-1;i++)
{
c[i+1] += c[i] / 10;
c[i] %= 10;
}
print(c);
return 0;
}
所以这两份代码有什么区别訥,欢迎大佬点评━(`∀´)ノ亻!
TIME:19:51
终于解决了
问题出在:
for (int i=0; a[i]; i++)
{
for (int j=0; b[j]; j++)
{
c1[i+j] += a1[i]*b1[j];
//计算
}
}
这个点上面
原来写的是:
for (int i=0; a1[i]; i++)
{
for (int j=0; b1[j]; j++)
{
c1[i+j] += a1[i]*b1[j];
//计算
}
}
仔细观察
发现区别在于for的执行条件上面
秉着有错就研究到底的态度
我发现了问题所在
正常的判断是判断数值(BOOL值)
例如:
判断的数值>=1 TRUE
判断的数值= 0 FALSE
看到这里,聪明的小伙伴已经知道错在哪里了(=@__@=)
0的ASCLL码是大于0的
这句话可能有点绕
CHAR 0 1 2 3 4 5 6 7 8 9
ASCLL -> INT
INT 1 2 3 4 5 6 7 8 9 0
大概就是这个意思
研究了半个小时
TIME:21:28
写了一个归并排序
#include <bits/stdc++.h>
using namespace std;
int a[100010];
int b[100010];
void merge(int l, int r)
{
if (l == r) return;
int mid = (l + r) / 2;
merge(l, mid);
merge(mid + 1, r);
int i = l, j = mid + 1;
int tot = l;
while (i <= mid && j <= r)
{
if (a[i] < a[j])
{
b[tot++] = a[i];
i++;
}
else
{
b[tot++] = a[j];
j++;
}
}
while (i <= mid) b[tot++] = a[i++];
while (j <= r) b[tot++] = a[j++];
for (int i = l; i <= r; i++)
{
a[i] = b[i];
}
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
merge(0, n-1);
for (int i = 0; i < n; i++)
{
cout << a[i] << ' ';
}
return 0;
}