这道题,无非就是普通的进制问题,好简单哦~~
函数:
int itoa(int s)
{
int r=0,k=0;//k表示位数-1
while(s>=1)//用数学方法转换进制
{
r+=s%n*pow(10,k);//省略数组
s/=n;//更新一次s
k++;//进一位
}
return r;为后续代码做铺垫!!!
}
### 然后,只需排版即可!
for(int i=1;i<=n-1;i++)
for(int j=1;j<=n-1;j++)
{
cout<<itoa(i*j);
if(j==n-1) cout<<endl;//判断是否为最后的数
else if(j==1&&itoa((j+1)*i)<10)cout<<" ";//判断每行第一个数是否为两位数
else if(itoa(i*j)<10&&itoa((j+1)*i)<10) cout<<" ";//判断下一个数是否为两位数
else cout<<" ";//情况都不满足,打一空格
}
# 上完整代码! ! !
#include<bits/stdc++.h>
using namespace std;
short n;
int itoa(int s)
{
int r=0,k=0,x[2];
while(s>=1)
{
r+=s%n*pow(10,k);
s/=n;
k++;
}
return r;
}
int main()
{
cin>>n;
if(n==10)//特判10进制,免得TLE!!!
for(int i=1;i<=n-1;i++)
for(int j=1;j<=n-1;j++)
{
cout<<i*j;
if(j==n-1) cout<<endl;
else if(j==1&&(j+1)*i<10) cout<<" ";
else if(i*j<10&&(j+1)*i<10) cout<<" ";
else cout<<" ";
}
else
for(int i=1;i<=n-1;i++)
for(int j=1;j<=n-1;j++)
{
cout<<itoa(i*j);
if(j==n-1) cout<<endl;
else if(j==1&&itoa((j+1)*i)<10) cout<<" ";
else if(itoa(i*j)<10&&itoa((j+1)*i)<10) cout<<" ";
else cout<<" ";
}
return 0;
}
数据很小,应该只有9个测试点!
# 怎么样,是不是很简单?