努力学习,永不放弃!
生活晴朗,万物可爱ヾ(≧▽≦*)o
2021.11.17
回头看当年写的东西,挺幼稚的,但我还是决定留下这段“黑历史”。
2022.10.25
经过这些天的练习后,分枝、循环结构、静态数组、冒泡等基础知识基本掌握。
做的题太多了懒得一个个上传了,毕竟没有难度特别大或者技巧性极高的题。
继续加油吧,立个flag,每天300行代码。
学无止境,无限进步。
10.计算1000!
来源CSDN,学习中
#include <iostream>
#include <cmath>
const int EXT = 5;
//运用log求数组的长度
int length(int n) {
double m = 0;
for (int i = 1; i <= n; ++i) {
m += log(i);
}
return int(m + 1);//n=m+1(取整)为1000!的位数
}
//计算值
void fact(int n) {
//------n<=0----看不太懂,大概是求数组长度出错在这里会报错?
if (n < 0) {
std::cout << "error\\n";
return;
} else if (0 == n) {
std::cout << 1;
return;
}
//---------construct--------------
int len = length(n) + EXT;//+5是为什么?
short \*num = new short\[len\];//申请储存空间
short carry, sum;
//----------init-------------
for (int i = 0; i < len; ++i) {
num\[i\] = 0;//初始化每个内存单元值为0
}
num\[0\] = 1;
//---------calc---------计算核心
for (int i = 2; i <= n; ++i) {
carry = 0;
for (int j = 0; j < len; ++j) {
sum = num\[j\] \* i + carry;//2=1\*2+0;
num\[j\] = sum % 10;//num\[0\]=2;保留末位
carry = sum / 10;//carry=0;考虑进位
}
}
//-----------end------------
//-----------output----------
bool zero = true;
for (int i = len - 1; i >= 0; --i) { //从高位往低位输出数值
if (zero) { //去除开头的几位0,嵌套循环逻辑值得反复学习
if (0 != num\[i - 1\]) {
zero = false;
}
} else {
std::cout << num\[i\];
}
}
//-----------destruct-----------
delete\[\] num;//把这里注释掉之后程序运行结果无变化,可能有其他作用
}
int main() {//C必须包含main函数,否则编译报错
fact(1000);
return 0;
}
9.将一个数倒序排列
#include <stdio.h>
int main() {
long long int a = 0, b = 0;
short i = 0;
scanf("%lld", &a);
b = a;
//确定位数
for (; a != 0; i++) {
a /= 10;
}
int t\[i\];
short x = i;
//初始化t\[i\]
for (; i >= 0; i--) {
t\[i\] = 0;
}
//输出结果
if (b == 0) {
printf("0");
}
if (b > 0) {
i = 0;
for (; b > 0; i++) {
t\[i\] = b % 10;
b /= 10;
}
i = 0;
for (; i < x; i++) {//此处不能是<=,否则多输出一位0。也可以将前面改为x=i-1
printf("%d", t\[i\]);
}
}
if (b < 0) {
b = -b;
i = 0;
for (; b > 0; i++) {
t\[i\] = b % 10;
b /= 10;
}
printf("-");
i = 0;
for (; i < x; i++ ) {
printf("%d", t\[i\]);
}
}
return 0;
}
8.比较数大小并排序(用到数组,可比较多个数)
#include <stdio.h>
int main()
{
int a = 1, b = 0, i = 0, max = 0;
printf("请输入要比较的数总数:\\n");
scanf("%d", &i);
int x\[i\];//声明一个数组以储存i个数
printf("依次输入数字:\\n");
while (a <= i) {
scanf("%d", &x\[a\]);
a++;
}
for (int c = 1; c <= i; c++) {
a = 1;
while (a < i) {
if (x\[a\] > x\[a + 1\]) {
b = x\[a\];
x\[a\] = x\[a + 1\];
x\[a + 1\] = b;
}
a++;
}
}
printf("从小到大依次排列如下:\\n");
a = 1;
while (a <= i) {
printf("%d\\n", x\[a\]);
a++;
}
printf("max=%d", x\[i\]);
return 0;
}
7.计算阶乘(小数据)
#include<stdio.h>
#include<math.h>
int main()
{
int n = 0;
unsigned long long result=1;
printf("请输入想要做阶乘的数字n:\\n");
scanf\_s("%d", &n);
do {
result \*= n;
n--;
} while (n > 1);
printf("n!=%llu\\n",result);
return 0;
}
6.计算一个自然数的位数
#include<stdio.h>
int main()
{
unsigned long long a = 0;
int b = 0;
printf("请输入一个自然数\[0,18446744073709551615\]:\\n");
scanf\_s("%llu", &a);
b++;
a = a / 10;
while (a > 0) {
b++;
a = a / 10;
}
printf("该数为%d位数。\\n", b);
return 0;
}
5.刘周平作业
#include<stdio.h>
int main()
{
int age=0, ID=0;
char a;
float average;
printf("请输入姓名:");
scanf\_s("%c", &a);
printf("请输入年龄:");
scanf\_s("%d", &age);
printf("请输入工号ID: ");
scanf\_s("%d", &ID);
printf("请输入工资(精确到小数点后两位):");
scanf\_s("%f", &average);
printf("姓名:%c\\n年龄:%d\\n工号:%d\\n工资:%.2f\\n", a, age, ID, average);
return 0;
}
4.计算时间差
#include<stdio.h>
int main()
{
int hour1=0, hour2=0,minute1=0, minute2=0;
scanf\_s("%d:%d", &hour1, &minute1);
scanf\_s("%d:%d", &hour2, &minute2);
int t1 = hour1 \* 60 + minute1;
int t2 = hour2 \* 60 + minute2;
int t = t2 - t1;
printf("change time = %d:%d",t/60,t%60);
}
3.计算平均数
#include<stdio.h>
int main()
{
int a, b, c, d, e, sum, average;
a = 80;
b = 95;
c = 78;
d = 87;
e = 65;
sum = a + b + c + d + e;
average = sum / 5;
printf("sum = %d\\n",sum);
printf("average = %d\\n", average);
return 0;
}
2.计算五个数字平均数
#include<stdio.h>
int main()
{
int arr\[5\] = { 0 };
//输入数字
int i = 0;
for (i = 0; i < 5; i++)
{
scanf\_s("%d:", &arr\[i\]);
}
//计算数字
int sum = 0;
for (i = 0; i < 5; i++)
{
sum += arr\[i\];
}
int average = sum / 5;
//输出结果
printf("平均数是%d", average);
return 0;
}
1.找零钱
#include<stdio.h>
int main()
{
int price = 0;
printf("请输入金额(元):");
scanf\_s("%d", &price);
int change = 100 - price;
printf("找您%d元。/n", change);
return 0;
}