
授人以渔,不授人以鱼。
程序代码:
// 打印九九乘数表
#include <locale.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
struct HzNumber
{
int code;
wchar_t ch1;
wchar_t ch2;
};
const HzNumber hzNumber[] = {
{ 0, L'〇', L'零' },
{ 1, L'一', L'壹' },
{ 2, L'二', L'贰' },
{ 3, L'三', L'叁' },
{ 4, L'四', L'肆' },
{ 5, L'五', L'伍' },
{ 6, L'六', L'陆' },
{ 7, L'七', L'柒'},
{ 8, L'八', L'捌' },
{ 9, L'九', L'玖' },
{ 10, L'十', L'拾' },
{ 100, L'百', L'佰' },
{ 1000, L'千', L'仟' },
{ 10000, L'万', L'万' }
};
void Pause(void);
wchar_t* PutNumber(int i, wchar_t* buffer, size_t count);
void wmain(void)
{
setlocale(LC_ALL, "chs");
for (int y = 1; y < 10; ++y)
{
for (int x = 1; x <= y; ++x)
{
wchar_t str[10] = { L'\0' };
wchar_t buffer[5];
wcscat_s(str, sizeof(str) / sizeof(wchar_t), PutNumber(x, buffer, sizeof(buffer) / sizeof(wchar_t)));
wcscat_s(str, sizeof(str) / sizeof(wchar_t), PutNumber(y, buffer, sizeof(buffer) / sizeof(wchar_t)));
if (x * y < 10)
{
wcscat_s(str, sizeof(str) / sizeof(wchar_t), L"得");
}
wcscat_s(str, sizeof(str) / sizeof(wchar_t), PutNumber(x * y, buffer, sizeof(buffer) / sizeof(wchar_t)));
wprintf_s(L"%s", str);
wprintf_s((wcslen(str) < 5) ? L" " : L" ");
}
putwchar(L'\n');
}
Pause();
}
void Pause(void)
{
wprintf_s(L"\n按任意键继续...");
_getwch();
}
wchar_t* PutNumber(int i, wchar_t* buffer, size_t count)
{
if ((i / 10) != 0)
{
swprintf(buffer, count, L"%c%c", hzNumber[i / 10].ch1, hzNumber[10].ch1);
size_t len = wcslen(buffer);
if ((i % 10) != 0)
{
buffer[len] = hzNumber[i % 10].ch1;
buffer[len+1] = L'\0';
}
}
else
{
swprintf(buffer, count, L"%c", hzNumber[i].ch1);
}
return buffer;
}
