一、作业内容
1. 求 Sn=a+aa+aaa+…+aa…a 之值,其中 a 是一个数字, n 表示 a 的位数, a 和 n 由键盘输入。例如:2+22+222+2222+22222( 此时 a=2,n=5).构造数字的方法如下 :
int main()
{
int a;
int n;
scanf("%d%d",&a,&n);
int sum=0;//和
int tmp=0;//当前值
for(int i=1;i<n;i++)
{
tmp=sum*10+a;//构造新数字
sum+=tmp;
}
printf("%d\n",sum);
return 0;
2. 给定一个整数可能为正 ,0, 负数 , 统计这个数据的位数 . 例如 1234567 输出 7 位 ; -12345678 输出 8 位 ;0输出 1 位
int main()
{
long long m;
long long n;
scanf("%lld",&n);
m=n;
int count=0;//位数
do
{
count++;
n/=10;//舍弃个位
}while(n!=0);
printf("%lld是%d位数\n",m,count);
return 0;
}
3. 给定一个整数可能为正 ,0, 负数 , 从右往左输出这个数据的每一位 .例如 1234567 输出 7 6 5 4 3 2 1例如 -12345678 输出 -8 7 6 5 4 3 2 1
int main()
{
long long n;
scanf("lld",&n);
if(n<0)
{
printf("-");
n=-n;
}
do
{
printf("%d",n%10);//得到个位
n/=10;
}while(n!=0);
return 0;
}
4.给定一个整数可能为正,0,负数,顺序输出这个数字的每一位.
例如 1234567 输出 1 2 3 4 5 6 7例如 -123456789 输出 -1 2 3 4 5 6 7 8 9
int main()
{
long long n;
scanf("%lld",&n);
if(n==0)
{
printf("0\n");
return 0;
}
int count=0;//位数
long long m=n;
do
{
n/=10;//舍弃个位
count++;
}
int power=pow(10,count-1);
m=n;
if(n<0)
{
printf("-");
return 0;
}
while(n!=0)
{
printf("%d\n",n/power);
n%=pow;
power/=10;
}
return 0;
}
二、上课内容
进制
:
按权展开求和
十进制
(0~9):123.45 = 1
10^2 + 2
10^1 + 3
10^0 + 4
10^-1 + 5*10^-2
二进制
(0~1):1010.1 = 2^3+2^1+2^-1=10.5
八进制
(0~7):123 = 1
8^2 + 2
8^1+3 = 83
十六进制
(0~9,a~f/A~F):123=1
16^2+2
16+3=256+35=291
人
(
十进制
)
计算机
(
二进制
)
人能直接使用二进制吗
? 01011010111101101111010110101011,
容易看错
,
人不能直接使用
二进制能转成十进制吗
? 01011010111101101111010110101011,
计算量太大
八进制
:
把二进制数
,
合三为一
.
例如
001 011 010 111 101 101 111 010 110 101 011
1 3 2 7 5 5 7 2 6 5 3
13275572653 (
历史遗留问题
,CPU
中央处理器
32,64
位
,
都是
4
得倍数
)
十六进制
:
把二进制数
,
合四为一
,
例如
0101 1010 1111 0110 1111 0101 1010 1011
5 A f 6 F 5 a B
十六进制必须掌握
:
二进制合四为一为十六进制
,
十六进制
1
个拆成
4
个二进制
表示方法
:
八进制用
0
开头
,
十六进制用
0x
或
0X
开头
0x10
表示十六进制的
10,
转二进制为
0001 0000 ,
转十进制为
16,
转八进制为
020
整型
:4
字节
,1
字节
=8
位
,1
位就是一个
0
或者
1
int main()
{
int a = 0x10;//十六进制
int b = 20;//十进制
int c = 020;//八进制
printf("%d,%d,%d\n",a,b,c);//16,20,16
printf("%x\n",a);//%x:输出十六进制数字
printf("%x\n",20);//14,
printf("%c,%d,%x\n",65,65,65);//'A',65,41
printf("%x,%X\n",20000,20000);//4e20,4E20
return 0;
}
int main()
{
int a = 20;
int b = 024;//0开头的数据表示八进制数字
int c = 0x14;//0x开头的数据表示十六进制
int d = 0b10100;//0b开头的数据表示二进制 (新标准增加的)
printf("%d,%d,%d,%d\n",a,b,c,d);
return 0;
}