来自:http://bbs.csdn.net/topics/390608383
初看到这个的时候,让我想到http://blog.csdn.net/ylf13/article/details/12747119 这里的,不用关键字求和
这种反常规的题目,总是让我念念不忘想用递归,可是发现,还没有递归可以实现的算法能用到这里,希望有人写出来的指点迷津下,在此谢过。
、
只准一个变量。。。
int main()
{
char const* const tbl = "1×1=1\n"
"1×2=2 2×2=4\n"
"1×3=3 2×3=6 3×3=9 \n"
"1×4=4 2×4=8 3×4=12 4×4=16\n"
"1×5=5 2×5=10 3×5=15 4×5=20 5×5=25\n"
"1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36\n"
"1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49\n"
"1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64\n"
"1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81";
puts(tbl);
return 0;
}
还是这个算法最帅了。。。
其实这里就是想办法弄出两个变量表示1-9
可是通过一个变量怎么表示两个1-9的数呢?
可以通过除法,还有求余,比如99、98、97.。。只要我们能够得到十位数和各位数就可以实现了
同理,用位操作,1001 1001 也表示99(不是十进制)那么只要移位就可以了,不过有个注意的,用这个数比较你会发现,1001 1001表示的是负数,所以得用无符号的
//============================================================================
// Name : PrintMultipleTable.cpp
// Author : YLF
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
using namespace std;
void fun1();
void fun2();
void fun3();
int main()
{
fun3();
return 0;
}
void fun1(){
int i =0;
for (i = 0; i < 81; i++)
{
if(((i/9)+1) > ((i%9)+1)){
continue;
}
cout<<((i/9)+1)<<"*"<<((i%9)+1)<<"="<<((i/9)+1)*((i % 9) + 1)<<"\t";
if (i % 9 == 8)
{
cout<<("\n");
}
}
}
void fun2(){
int i = 99;
while(i>10){
if(i%10 == 0 || (i/10)<(i%10)){
i--;
continue;
}
cout<<(i/10)<<"*"<<(i%10)<<"="<<(i/10)*(i%10)<<"\t";
if(i%10 == 1)
cout<<endl;
i--;
}
}
/*
* 利用一个位为: 1001 1001
* 也是99 进行计算
*/
void fun3(){
unsigned char i = 0x99;
while(i>0x10){
if((i&0x0F) == 0 || ((i>>4)&0x0F)<(i&0x0F)){
i--;
continue;
}
cout<<((i>>4)&0x0F)<<"*"<<(i&0x0F)<<"="<<((i>>4)&0x0F)*(i&0x0F)<<"\t";
if((i&0x0F) == 1)
cout<<endl;
i--;
}
}
9*9=81 9*8=72 9*7=63 9*6=54 9*5=45 9*4=36 9*3=27 9*2=18 9*1=9
8*8=64 8*7=56 8*6=48 8*5=40 8*4=32 8*3=24 8*2=16 8*1=8
7*7=49 7*6=42 7*5=35 7*4=28 7*3=21 7*2=14 7*1=7
6*6=36 6*5=30 6*4=24 6*3=18 6*2=12 6*1=6
5*5=25 5*4=20 5*3=15 5*2=10 5*1=5
4*4=16 4*3=12 4*2=8 4*1=4
3*3=9 3*2=6 3*1=3
2*2=4 2*1=2
1*1=1